2015-03-13 3 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

Что такое сообщение тоста на мобильном телефоне? –

+0

@MrSmith Тот, который я показываюToast.makeText (контекст, «Извините! Не удалось получить изображение», Toast.LENGTH_SHORT) .show(); –

+0

Проверьте, разрешено ли вам разрешение интернета в файле манифеста. –

ответ

0

Проверьте, что на вашем телефоне достаточно сильного интернет-соединения. Кроме того, если я не ошибаюсь, метод onCreate должен @Override.

+0

метод onCreate переоценен. Я просто пропустил эту строку из кода при вставке сюда. –

0

Вы перечислили свой бэкэнда URL как:

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

По-видимому, этот url доступен только из вашей собственной сети (от вашего собственного ПК разработки и, следовательно, эмулятора, который работает на вашем собственном ПК), но он недоступен за пределами вашей собственной сети.

Вам необходимо сделать общедоступным бэкэнд-сервис, и это зависит от того, что такое служба.

Вам нужно будет рассказать нам больше о том, где работает серверная служба. Это сервис, работающий на вашем собственном компьютере разработки, или он предоставляется кем-то еще в вашей компании или что-то еще?

Если он работает на вашем компьютере разработки, измените URL-адрес на ваш общедоступный IP-адрес (посмотрите на http://www.whatsmyip.org/) и откройте порт на своем брандмауэре.

0

Убедитесь, что ваш мобильный телефон и ПК подключены к той же сети WI-FI.

+0

Да, они ... –

Смежные вопросы