2016-09-24 7 views
1

問題があります。私は、アクティビティの原因非同期タスクを作成しようとしていて、アダプタが作成された、呼び出されたメソッド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) 
+2

投稿ログキャストログ – Nikhil

+0

追加してください。 –

+0

ここでchatCreate()メソッド –

答えて

3

new Profile().chatCreate(); 

Profileは、Android成分である、Activityです。 newを使用して自分でAndroidコンポーネントをインスタンス化することはできません。 Androidフレームワークは、使用する前にContextを設定する必要があるため、Androidコンポーネントをインスタンス化できます。

Activityでメソッドを呼び出す場合は、既にAndroidフレームワークで作成されたActivityのインスタンスを使用する必要があります。

+0

そして私は何をしますか? –

+0

'AsyncTask'は' Profile'クラスによって作成され、コンストラクタ内の参照を渡します。単に 'act'を' Profile'としてキャストし、 '((Profile)act).chatCreate();'のように 'chatCreate()'を呼び出してください。 –

0

あなたはthisが活動中でアクティビティのコンテキストが送信されますが、非同期タスクとケースをないthatsの(ここではthisは、非同期タスクそのものを指します)ので、あなたがしなければならないだろうと言いますyourActivity.thisです。あなたは絶対に積極的にこれを行うことはできません

+0

は役に立ちません –

関連する問題