2017-03-17 66 views
0

我在这里有一个问题。从结果中更新ViewPager后Asynctask

我有一个执行的AsyncTask摆脱它连接到MySQL数据库的PHP文件中的一些结果的login_activity。

public class login_main extends AppCompatActivity implements OnDataSendToActivity{ 
    ViewPager viewPager; 
    CustomAdapter adapter; 

    ArrayList<String> image = new ArrayList<>(); 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_login_main); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     //setSupportActionBar(toolbar); 

     String type = "getProfileImages"; 

     RetrieveData retrieveData = new RetrieveData(this); 

     retrieveData.execute(type); 

     //After Asycntask, get the result and put back into image array 

     viewPager = (ViewPager) findViewById(R.id.view_pager); 
     adapter = new CustomAdapter(login_main.this,image); 
     viewPager.setAdapter(adapter); 
    } 


    public void sendData(String response) { 
     try { 
      JSONObject jsonObject = new JSONObject(response); 
      JSONArray result = jsonObject.getJSONArray("result"); 

      for (int i = 0 ; i < result.length(); i++) { 
       JSONObject obj = result.getJSONObject(i); 
       String id = obj.getString("image"+i); 
       image.add("http://192.168.12.252/"+id+"/profile.png"); 
      } 


     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
    } 

当我得到的结果,我尝试通过接口从的AsyncTask

protected void onPostExecute(String result) { 
     super.onPostExecute(result); 
     dataSendToActivity.sendData(result); 
} 

一切处理结果不同的是,当我把它传递给PageAdapter图像阵列总是空的是工作的罚款。我如何将数据传回到asycntask的活动中,并通过使用接口将它推入数组映像,它无法工作。

或者反正我可以直接处理它在Asyntask并更新ViewPager。

这里是我的AsyncTask

public class RetrieveData extends AsyncTask<String,Void,String>{ 
    Context context; 
    RetrieveData(Context ctx) { 
     context = ctx; 
    } 
    private OnDataSendToActivity dataSendToActivity; 

    public RetrieveData(Activity activity){ 
     dataSendToActivity = (OnDataSendToActivity)activity; 
    } 

    @Override 
    protected String doInBackground(String... params) { 
     String profile_url = "http://192.168.12.252/getprofile.php"; 
     String image_url = "http://192.168.12.252/imagelist.php"; 
     String type = params[0]; 

     if(type.equals("getProfile")){ 
      try { 
       String user_name = params[1]; 
       URL url = new URL(profile_url); 
       HttpURLConnection httpURLConnection = null; 
       httpURLConnection = (HttpURLConnection)url.openConnection(); 
       httpURLConnection.setRequestMethod("POST"); 
       httpURLConnection.setDoOutput(true); 
       httpURLConnection.setDoInput(true); 

       httpURLConnection.setDoOutput(true); 
       httpURLConnection.setDoInput(true); 
       OutputStream outputStream = httpURLConnection.getOutputStream(); 
       BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream, "UTF-8")); 
       String post_data = URLEncoder.encode("user_name", "UTF-8")+"="+URLEncoder.encode(user_name, "UTF-8"); 
       bufferedWriter.write(post_data); 
       bufferedWriter.flush(); 
       bufferedWriter.close(); 
       outputStream.close(); 

       InputStream inputStream = httpURLConnection.getInputStream(); 
       BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream,"iso-8859-1")); 
       String result = null; 
       result = bufferedReader.readLine(); 
       bufferedReader.close(); 
       inputStream.close(); 
       httpURLConnection.disconnect(); 
       return result; 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     }else if(type.equals("getProfileImages")){ 
      try { 
       URL url = new URL(image_url); 
       HttpURLConnection httpURLConnection = null; 
       httpURLConnection = (HttpURLConnection)url.openConnection(); 
       httpURLConnection.setRequestMethod("POST"); 
       httpURLConnection.setDoOutput(true); 
       httpURLConnection.setDoInput(true); 

       httpURLConnection.setDoOutput(true); 
       httpURLConnection.setDoInput(true); 
       OutputStream outputStream = httpURLConnection.getOutputStream(); 
       BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream, "UTF-8")); 
       String post_data = URLEncoder.encode("Image", "UTF-8")+"="+URLEncoder.encode("Image", "UTF-8"); 
       bufferedWriter.write(post_data); 
       bufferedWriter.flush(); 
       bufferedWriter.close(); 
       outputStream.close(); 

       InputStream inputStream = httpURLConnection.getInputStream(); 
       BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream,"iso-8859-1")); 
       String result = null; 
       result = bufferedReader.readLine(); 
       bufferedReader.close(); 
       inputStream.close(); 
       httpURLConnection.disconnect(); 
       return result; 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
     return null; 
    } 

    @Override 
    protected void onPostExecute(String result) { 
     super.onPostExecute(result); 
     dataSendToActivity.sendData(result); 
    } 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
    } 

    @Override 
    protected void onProgressUpdate(Void... values) { 
     super.onProgressUpdate(values); 
    } 
} 
+1

您可以发布您'AsyncTask'在这里? – AndiGeeky

+0

检查您是否收到任何异常,并检查'sendData()'中'result'的长度。你可能会得到一些'JSONException'或'result'的长度为0 –

+0

@RaviRupareliya结果里面有东西,这是我想要的东西。正如你所看到的,我做了一个循环来将字符串添加到数组中。当我Log.d数组中,数组中有3个字符串,但是当它返回到viewpager时,图像没有任何东西 –

回答

0

的执行顺序是全乱了。在你向图像数组添加数据时,空图像数组已经被传递给视图寻呼机适配器,因此图像数组为空。

ü继续做同样的事情,但不是在的onCreate()设置视图寻呼机适配器设置适配器ü调用该方法的SendData()之后;

修改这样的发送数据()方法。

public void sendData(String response) { 
     try { 
      JSONObject jsonObject = new JSONObject(response); 
      JSONArray result = jsonObject.getJSONArray("result"); 

      for (int i = 0 ; i < result.length(); i++) { 
       JSONObject obj = result.getJSONObject(i); 
       String id = obj.getString("image"+i); 
       image.add("http://192.168.12.252/"+id+"/profile.png"); 
      } 


     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
    adapter = new CustomAdapter(login_main.this,image);//set ur image array here 
     viewPager.setAdapter(adapter); 
    } 
+0

感谢您的答案。我曾尝试过,但ViewPager发疯了。当我尝试向第二张图像的左侧滑动时,它总是回到第一张图像。它似乎像这部分继续循环,它总是将其设置为图像1 –

+0

共享你的视图寻呼机适配器代码绝对有一个错误在你的适配器.. @ ChongWaiLun –

+0

你是对的!那里有错误导致问题。它正在工作,谢谢! –