2015-03-13 85 views
2

這裏我試圖從URL中獲取圖像。圖像加載在模擬器中,但不是在Android設備中。吐司消息顯示在設備中。我嘗試了所提到的解決方案,但是效果不佳。圖像顯示在模擬器中,但不是在Android手機上

protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.employee_info_activity); 

     back_btn = (Button) findViewById(R.id.back_button); 
     empId_edt = (EditText) findViewById(R.id.emp_id); 
     name_edt = (EditText) findViewById(R.id.emp_name); 
     mobileNo_edt = (EditText) findViewById(R.id.emp_mobile_no); 
     panNo_edt = (EditText) findViewById(R.id.emp_pan_no); 
     passportNo_edt = (EditText) findViewById(R.id.emp_passport_no); 
     emailId_edt = (EditText) findViewById(R.id.emp_email); 
     address_edt = (EditText) findViewById(R.id.emp_addr); 
     profilePhoto_imgvw = (ImageView) findViewById(R.id.profile_pic); 

     empid = SharedPreferncesUtility.getempId(context); 
     password = SharedPreferncesUtility.getPassword(context); 

     url = "http://xxx.xxx.x.xx:xxxx/XXXX/downloadAction.do?empId="+empid+"&folderName=PHOTO"; 

     back_btn.setOnClickListener(new OnClickListener() 
     { 
      @Override 
      public void onClick(View v) 
      { 
       Intent intent = new Intent(EmployeeInfoActivity.this, HomeScreenActivity.class); 
       startActivity(intent); 
      } 
     }); 

     new EmployeeProfilePhotoAsyncTask(context, url).execute(); 
    } 

    final class EmployeeProfilePhotoAsyncTask extends AsyncTask<String, Void, String> 
    { 
     private Context context; 
     private ProgressDialog dlg; 
     private String url; 

     public EmployeeProfilePhotoAsyncTask(Context context, String url) 
     { 
      this.context = context; 
      this.url = url; 
     } 

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

      dlg = new ProgressDialog(EmployeeInfoActivity.this); 
      dlg.setCanceledOnTouchOutside(false); 
      dlg.setCancelable(false); 
      dlg.setMessage("Please wait..."); 
      dlg.show(); 
     } 

     @Override 
     protected String doInBackground(String... params) 
     { 
      try 
      { 
       URL link = new URL(url); 
       profilePhoto = BitmapFactory.decodeStream(link.openConnection().getInputStream()); 

      } 
      catch (MalformedURLException e) 
      { 
       e.printStackTrace(); 
      } 
      catch (IOException e) 
      { 
       e.printStackTrace(); 
      } 
      return url; 
     } 
     protected void onPostExecute(String result) 
     { 
      dlg.dismiss(); 
      String jsonString = gJSON.generateJSON(empid, password); 
      new EmployeeProfileAsync(context, jsonString).execute(); 
     } 
    } 

    final class EmployeeProfileAsync extends AsyncTask<String, Void, String> 
    { 
     private Context context; 
     private ProgressDialog dlg; 

     private String jsonData; 

     public EmployeeProfileAsync(Context context, String jsonData) 
     { 
      this.context = context; 
      this.jsonData = jsonData; 
     } 

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

      dlg = new ProgressDialog(EmployeeInfoActivity.this); 
      dlg.setCanceledOnTouchOutside(false); 
      dlg.setCancelable(false); 
      dlg.setMessage("Please wait..."); 
      dlg.show(); 
     } 

     @Override 
     protected String doInBackground(String... params) 
     { 
      String result = sc.NewServiceCall(URLConstants.profileDataURL, jsonData); 
      return result; 
     } 

     protected void onPostExecute(String result) 
     { 
      dlg.dismiss(); 
      if (result != null) 
      { 
       try 
       { 
        JSONObject jobj = new JSONObject(result); 
        String statusCode = jobj.getString("statusCode"); 

        if (statusCode.equalsIgnoreCase("1001")) 
        { 
         String response = jobj.getString("response"); 
         ParseData obj = new ParseData(); 
         EmployeeDTO ob = obj.parseEmployeeData(response); 

         if(profilePhoto != null) 
         { 
          profilePhoto_imgvw.setImageBitmap(profilePhoto); 
         } 
         else 
         { 
          Toast.makeText(context, "Sorry! Could not fetch the Image", Toast.LENGTH_SHORT).show(); 
         } 

         empId_edt.setText(String.valueOf(ob.getEmpId())); 
         name_edt.setText(String.valueOf(ob.getFirstName())); 
         mobileNo_edt.setText(String.valueOf(ob.getMobileNo())); 
         panNo_edt.setText(String.valueOf(ob.getPan())); 
         passportNo_edt.setText(String.valueOf(ob.getPassport())); 
         emailId_edt.setText(String.valueOf(ob.getMailOffice())); 
         address_edt.setText(String.valueOf(ob.getAddress())); 
        } 
        else 
        { 
         Toast.makeText(context, jobj.getString("message"), Toast.LENGTH_LONG).show(); 
         System.out.println("message"+jobj.getString("message")); 
        } 
       } 
       catch (Exception e) 
       { 
        e.printStackTrace(); 
       } 
      } 
      else 
      { 
       Toast.makeText(context, result, Toast.LENGTH_LONG).show(); 
      } 
     } 
    } 
+0

移動電話上顯示的Toast消息是什麼? – 2015-03-13 10:11:34

+0

@MrSmith我是一個顯示Toast.makeText(上下文,「對不起!無法獲取圖像」,Toast.LENGTH_SHORT).show(); – 2015-03-13 10:18:46

+0

檢查您是否在清單文件中定義了Internet權限。 – 2015-03-13 10:21:37

回答

0

檢查您的手機上是否有足夠強大的互聯網連接。另外,如果我沒有弄錯,onCreate方法應該是@Override

+0

onCreate方法已過時。我在這裏粘貼時從代碼中跳過了該行。 – 2015-03-13 10:16:17

0

您列出你的後臺網址爲:

http://xxx.xxx.x.xx:xxxx/XXXX/downloadAction.do?empId=etc

顯然,這個URL只能從你自己的網絡(從你自己的開發PC,因此也可以在你自己的PC上運行的模擬器)訪問,但它不能在你自己的網絡之外訪問。

您將不得不使後端服務公開可用,這取決於服務是什麼。

您將不得不告訴我們更多關於後端服務運行的信息。它是在您自己的開發PC上運行的服務,還是由您公司的其他人提供的服務或其他內容?

如果它在您的開發PC上運行,那麼將url更改爲您的公共ip(在http://www.whatsmyip.org/上查看)並在防火牆上打開端口。

0

確保您的手機和PC連接到相同的WI-FI網絡。

+0

是的,他們是...... – 2015-03-13 11:29:59

相關問題