Android 安卓:上传照片

Android 安卓:上传照片,android,upload,photo,Android,Upload,Photo,您好 我无法从Android手机上传照片。下面是我用来提示用户选择照片的代码: public class Uploader{ public void upload(){ Log.i("EOH","hi..."); Intent photoPickerIntent = new Intent(Intent.ACTION_GET_CONTENT); photoPickerIntent.setType("image/

您好

我无法从Android手机上传照片。下面是我用来提示用户选择照片的代码:

public class Uploader{
        public void upload(){
            Log.i("EOH","hi...");
            Intent photoPickerIntent = new Intent(Intent.ACTION_GET_CONTENT);
            photoPickerIntent.setType("image/*");
            startActivityForResult(photoPickerIntent, 1);
        }
        protected void onActivityResult(int requestCode, int resultCode, Intent data)
        {
            if (resultCode == RESULT_OK)
            {
                Bundle extras = data.getExtras();
                Bitmap b = (Bitmap) extras.get("data");
                //what do do now with this Bitmap...
                    //how do I upload it?




            }
        }

    }
所以我有位图b,但是我不知道下一步该怎么做

我有以下用于发送POST请求的代码:

List<NameValuePair> params = new ArrayList<NameValuePair>(2);  
params.add(new BasicNameValuePair("someValA", String.valueOf(lat)));  
params.add(new BasicNameValuePair("someValB", String.valueOf(lng)));  
new HttpConnection(handler).post("http://myurl.com/upload.php",params);
List params=newarraylist(2);
params.add(新的BasicNameValuePair(“someValA”,String.valueOf(lat)));
参数add(新的BasicNameValuePair(“someValB”,String.valueOf(lng)));
新建HttpConnection(处理程序).post(“http://myurl.com/upload.php“,参数);
我如何将位图图像连接到这个?我在谷歌上搜索了很久,找不到一个好方法

我希望有人能帮忙

多谢各位


好的,我试过希拉格·沙阿的建议。这是我的密码:

protected void onActivityResult(int requestCode, int resultCode, Intent data)
        {
            if (resultCode == RESULT_OK)
            {
                Uri imageUri=data.getData();
                List<NameValuePair> params = new ArrayList<NameValuePair>(1);
                params.add(new BasicNameValuePair("image", imageUri.getPath()));
                post("http://www.myurl.com/ajax/uploadPhoto.php",params);
            }
        }
activityresult上受保护的void(int-requestCode、int-resultCode、Intent-data)
{
if(resultCode==RESULT\u OK)
{
Uri imageUri=data.getData();
列表参数=新的ArrayList(1);
add(新的BasicNameValuePair(“image”,imageUri.getPath());
职位(”http://www.myurl.com/ajax/uploadPhoto.php“,参数);
}
}
其中post功能(推荐)为:

public void post(字符串url,列表nameValuePairs){
HttpClient HttpClient=新的DefaultHttpClient();
HttpContext localContext=新的BasicHttpContext();
HttpPost HttpPost=新的HttpPost(url);
试一试{
MultipartEntity=新的MultipartEntity(HttpMultipartMode.BROWSER_兼容);
对于(int index=0;index
然而,myurl.com/ajax/uploadPhoto.php却一无所获。我已经创建了一个PHP日志来记录uploadPhoto.PHP上的任何活动,但是没有显示任何内容。值得注意的是,如果我直接在web浏览器中键入myurl.com/ajax/uploadPhoto.php,它的日志就可以了

还有什么建议吗


非常感谢,

如果您还没有。尝试将post包装到异步任务中的服务器并调用该任务。我发现我使用的api要求http POST/gets远离主线程,以避免锁定主线程可能出现的问题

只需将其设置为异步任务就相对容易了,而且实际上已经开始工作了

有关异步任务的详细信息:

举个简单的例子,这是我的异步任务之一:

private class SomeAsyncTask extends AsyncTask<String, Void, JSONObject> {

    @Override
    protected JSONObject doInBackground(String... arg0) {

        UserFunctions uf = new UserFunctions();
        JSONObject res = uf.doPostToServer(arg0[0], arg0[1], arg0[2], getApplicationContext());

        return res;
    }

    @Override
    protected void onPostExecute(JSONObject result) {

        try {
            int success = result.getInt("success");
            if(success == 1) {

                Intent vcact = new Intent(getApplicationContext(), OtherActivity.class);
                vcact.putExtra("id", cid);
                startActivity(vcact);
                // close main screen
                finish();

            } else {
                Toast.makeText(SomeActivity.this, "Error saving to server. Try again.", Toast.LENGTH_SHORT).show();
            }
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
}

我发现http POST必须从异步任务中完成,否则它们就不会发生。我一直在考虑做一些类似的事情,包括发布和获取数据,并且需要在异步任务中将帖子包装到url。()实际发布是在uf.doPostToServer中完成的。。。我认为你的思路是对的,试着让它异步,看看是否有帮助。对我来说是这样的。
private class SomeAsyncTask extends AsyncTask<String, Void, JSONObject> {

    @Override
    protected JSONObject doInBackground(String... arg0) {

        UserFunctions uf = new UserFunctions();
        JSONObject res = uf.doPostToServer(arg0[0], arg0[1], arg0[2], getApplicationContext());

        return res;
    }

    @Override
    protected void onPostExecute(JSONObject result) {

        try {
            int success = result.getInt("success");
            if(success == 1) {

                Intent vcact = new Intent(getApplicationContext(), OtherActivity.class);
                vcact.putExtra("id", cid);
                startActivity(vcact);
                // close main screen
                finish();

            } else {
                Toast.makeText(SomeActivity.this, "Error saving to server. Try again.", Toast.LENGTH_SHORT).show();
            }
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
}
new SomeAsyncTask().execute(cid, otherdata, moredata);