-1

ギャラリーからアプリにオンラインで画像を正常にアップロードできるのは私だけです...他の人にとっては、httpリクエストで電話がクラッシュするようです。これは私の側ですか、それとも彼らの側ですか?ありがとう..

public void onCreate(Bundle icicle) {

super.onCreate(icicle);

setContentView(R.layout.activity_main);


Bitmap bitmapOrg = BitmapFactory.decodeResource(getResources(),

R.drawable.icon2);

Bitmap bitmapOrgg = BitmapFactory.decodeFile(BrowsePicture.selectedImagePath);

ByteArrayOutputStream bao = new ByteArrayOutputStream();

//bitmapOrg.compress(Bitmap.CompressFormat.JPEG, 90, bao);

bitmapOrgg.compress(Bitmap.CompressFormat.JPEG, 30, bao);

byte [] ba = bao.toByteArray();

String ba1=Base64.encodeBytes(ba);

ArrayList<NameValuePair> nameValuePairs = new

ArrayList<NameValuePair>();

nameValuePairs.add(new BasicNameValuePair("image",ba1));

try{

HttpClient httpclient = new DefaultHttpClient();

HttpPost httppost = new

HttpPost("http://asdfasdf.php");

httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

HttpResponse response = httpclient.execute(httppost);

HttpEntity entity = response.getEntity();

is = entity.getContent();

}catch(Exception e){

Log.e("log_tag", "Error in http connection "+e.toString());
Log.d("1","1");
}



try{
    Class ourClass = Class.forName("www.xxx.com");
    Intent ourIntent = new Intent(upload.this, ourClass);
    startActivity(ourIntent);
    Log.d("2","2");
    }catch(ClassNotFoundException e){
    e.printStackTrace();
    }

}
}

これはクラッシュした場合の例です。ただし、別のインスタンスでもクラッシュします。インターネットに接続するアプリの一部を使用しているときだと思います。

それは私の電話では動作しますが、他の人では動作しませんでした (私は S1 Blaze を持っています。彼らは Nexus と Galaxy S4 を持っていました)。

アップデート:

try{
    Class ourClass = Class.forName("com.x.x.asdf.");
    Intent ourIntent = new Intent(upload.this, ourClass);
    startActivity(ourIntent);
    Log.d("2","2");
    }catch(ClassNotFoundException e){
    e.printStackTrace();
    }
    loadSomeStuff uploader= new loadSomeStuff();
    // since the first param in <Void,Void,Void> you do not send in anything in execute.
    uploader.execute("test");

    Log.e("LOG", BrowsePicture.selectedImagePath);



}


public class loadSomeStuff extends AsyncTask<String, Void, String>{

    @Override
    protected String doInBackground(String... params) {
        Bitmap bitmapOrg = BitmapFactory.decodeResource(getResources(),



                R.drawable.icon2);

                Bitmap bitmapOrgg = BitmapFactory.decodeFile(BrowsePicture.selectedImagePath);
                Log.e(BrowsePicture.selectedImagePath, "yo");
                ByteArrayOutputStream bao = new ByteArrayOutputStream();

                //bitmapOrg.compress(Bitmap.CompressFormat.JPEG, 90, bao);

                bitmapOrgg.compress(Bitmap.CompressFormat.JPEG, 30, bao);

                byte [] ba = bao.toByteArray();

                String ba1=Base64.encodeBytes(ba);

                ArrayList<NameValuePair> nameValuePairs = new

                ArrayList<NameValuePair>();

                nameValuePairs.add(new BasicNameValuePair("image",ba1));

                try{

                HttpClient httpclient = new DefaultHttpClient();

                HttpPost httppost = new

                HttpPost("http://website.com/php");

                httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

                HttpResponse response = httpclient.execute(httppost);

                HttpEntity entity = response.getEntity();

                is = entity.getContent();

                }catch(Exception e){

                Log.e("log_tag", "Error in http connection "+e.toString());
                Log.d("1","1");
                }
        return "test";
    }
    @Override
    protected void onPostExecute(String pinny){

    }
}


}
4

2 に答える 2

1

メイン UI スレッドでネットワーク呼び出しを行っています。

古いバージョンの Android を使用しているため、これはお使いの携帯電話で機能している可能性があります (Gingerbread だと思います)。

API レベル 11 以降、これはNetworkOnMainThreadExceptionをスローします。

解決策: ネットワーク呼び出しは、バックグラウンド スレッドからのみ行う必要があります。

AsyncTaskを使用することをお勧めします。

于 2013-07-30T22:13:48.153 に答える