我正在測試一些處理程序的東西,並且我遇到了以下問題,設計了類本身,我覺得沒有多大意義(將活動的上下文傳遞給構造函數其他課程又擴展了Thread),但我認爲它可以從「學術」角度來看有用。關於Android中的活動上下文和處理程序
所以我有兩個類 - 第一個是活動,第二個擴展線程,第二個類將傳遞一些數據到活動的想法,我做了一個構造函數,將從這兩個處理程序該活動的活動和背景
PS。我發現,當我嘗試通過Location對象參數問題實際上只出現時,編輯的代碼:
活動部分:
public class MainActivity extends Activity {
public static final String content="Asega kvo stava";
public static final Integer kom=2;
Context m;
private Handler nok;
Location loc;
String TAG="TAG";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
nok=new Handler() {
public void handleMessage(Message msg)
{
Log.d(TAG, "msg: " + msg);
Bundle m=msg.getData();
}
};
new locac(nok,this).start();
,這裏是另一類
public class locac extends Thread implements LocationListener{
public static Context Ctx;
private final Handler nok;
LocationManager norm;
public static String moi="manag.GPS_PROVIDER";
public locac (Handler h, Context k){
nok=h;
Ctx=k;
}
.....
public void run()
{
norm=(LocationManager)Ctx.getSystemService(Ctx.LOCATION_SERVICE);
norm.requestLocationUpdates(norm.GPS_PROVIDER, 0, 0, this);
Location oko=norm.getLastKnownLocation(norm.GPS_PROVIDER);
int lato=(int)oko.getLatitude();
Message message=new Message();
Bundle bok=new Bundle();
int beta=145;
bok.putInt("tok",lato);
bok.putInt("toke",beta);
message.setData(bok);
nok.sendMessage(message) ;
}
現在,如果我嘗試編譯那一個,它會給我以下消息
java.lang.RuntimeException: Can't create handler inside thread that has not called
Looper.prepare()
at android.os.Handler.<init>(Handler.java:197)
at android.os.Handler.<init>(Handler.java:111)
i F I刪除Locac的構造的情況下部分,並留下它只是
public locac (Handler h){
nok=h;
}
,然後只是初始化 - 新locac(NOK)。開始();在活動類,然後它工作正常 我無法計算爲什麼調用線程內的上下文給Looper消息,更詳細的解釋將不勝感激(用於學習的目的也)
這是不對的,採用t他在MainActivity的範圍內指的是MainActivity.this。 – ElDuderino
是的,我也嘗試MainActivity.this,相同issue.I編輯原始帖子,因爲它會變成問題實際上出現時,當我嘗試通過位置對象的方式 –