[英]When you call a method of asynchronous tasks, the application quits
我有個問題。 我正在嘗試創建Activity導致異步任務,並在執行完成適配器的被調用方法adapterCreate()類Profile.class之后。 有必要在方法的第一個參數中傳輸上下文。 在這里,例如,如果我在線上調用類中的方法,一切正常,如果傳輸上下文“this”。 如果我從異步任務調用,應用程序退出。 我不知道該怎么辦。 我希望得到你的幫助。 謝謝!
Profile.class
public class Profile extends AppCompatActivity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_application);
new ParseTask(this).execute();
}
public void adapterCreate(Activity context){
String[] str1 = {"mesages1", "messages2"};
String[] str2 = {"photo1", "photo2"};
String[] str3 = {"name1", "name2"};
adapter = new LazyAdapter(context, str1, str2, str3);
list.setAdapter(adapter);
}
}
ParseTask.class
public class ParseTask extends AsyncTask<Void, Void, String> {
HttpURLConnection urlConnection = null;
BufferedReader reader = null;
String resultJson = "";
Activity act;
public ParseTask (Activity context){
this.act = context;
}
@Override
protected String doInBackground(Void... params) {
try {
URL url = new URL("/friends.json");
urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("GET");
urlConnection.connect();
InputStream inputStream = urlConnection.getInputStream();
StringBuffer buffer = new StringBuffer();
reader = new BufferedReader(new InputStreamReader(inputStream));
String line;
while ((line = reader.readLine()) != null) {
buffer.append(line);
}
resultJson = buffer.toString();
} catch (Exception e) {
e.printStackTrace();
}
return resultJson;
}
@Override
protected void onPostExecute(String strJson) {
super.onPostExecute(strJson);
new Profile().chatCreate();
}
}
LazyAdapter.class
public class LazyAdapter extends BaseAdapter {
private Activity activity;
private String[] messages;
private String[] photo;
private String[] name;
private static LayoutInflater inflater=null;
//public ImageLoader imageLoader;
public LazyAdapter(Activity a, String[] messages_c, String[] photo_c, String[] name_c) {
activity = a;
messages=messages_c;
photo = photo_c;
name = name_c;
inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
//imageLoader=new ImageLoader(activity.getApplicationContext());
}
public int getCount() {
return name.length;
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
View vi=convertView;
if(convertView==null) vi = inflater.inflate(R.layout.listview_row, null);
TextView name_c = (TextView)vi.findViewById(R.id.name_c);
TextView content_c = (TextView)vi.findViewById(R.id.content_c);
ImageView image = (ImageView)vi.findViewById(R.id.image);
name_chat.setText(name[position]);
content_chat.setText(messages[position]);
return vi;
}
}
logcat日志
09-24 16:49:10.821 7969-7969/package E/AndroidRuntime: FATAL EXCEPTION: main
java.lang.NullPointerException
at package.Profile.chatCreate(Profile.java:645)
at package.ParseTask.onPostExecute(ParseTask.java:108)
at package.ParseTask.onPostExecute(ParseTask.java:21)
at android.os.AsyncTask.finish(AsyncTask.java:631)
at android.os.AsyncTask.access$600(AsyncTask.java:177)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4745)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)
你絕對肯定不能這樣做:
new Profile().chatCreate();
Profile
是一個Activity
,它是一個Android組件。 您無法使用new
自行實例化Android組件。 只有Android框架可以實例化Android組件,因為他們需要在使用它們之前設置它們的Context
。
如果要在Activity
上調用方法,則需要使用已由Android框架創建的Activity
實例。
當你說this
在其中活動的活動的情況下被發送但那不是與異步任務(這里的情況this
指的是異步任務本身),所以你要做的就是yourActivity.this
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.