关于AsyncHttpClient框架的post 提交表单上传文件怎么弄
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于AsyncHttpClient框架的post 提交表单上传文件怎么弄相关的知识,希望对你有一定的参考价值。
用开源项目Asynchttpclient的GET_POST访问网络* 使用GET方式提交数据:
//1、创建一个浏览器对象
AsyncHttpClient client = new AsyncHttpClient();
//2、发送一个GET请求
client.get(path, new AsyncHttpResponseHandler()
/**
* 请求处理成功后调用这个方法
* statusCode 响应码 200 404 503
* headers 响应头信息
* responseBody 服务器返回的响应数据(如:登陆成功、失败等)
*/
@Override
public void onSuccess(int statusCode, Header[] headers,
byte[] responseBody)
Toast.makeText(MainActivity.this,
new String(responseBody), 0).show();
参考技术A AsyncHttpClient client = new AsyncHttpClient();
client.setTimeout(6 * 1000);
RequestParams params = new RequestParams();
if (Bimp.tempSelectBitmap.size() > 0)
for(int i = 0; i < Bimp.tempSelectBitmap.size(); i++)
//图片路径
if(i != Bimp.tempSelectBitmap.size() - 1)
picpath = (Bimp.tempSelectBitmap.get(i).getImagePath() + "&&&&&");
else
picpath = Bimp.tempSelectBitmap.get(i).getImagePath();
try
params.put("img", new File(picpath));
catch (FileNotFoundException e)
// TODO Auto-generated catch block
e.printStackTrace();
client.post(mUrl, params, new AsyncHttpResponseHandler()
// 请求成功
@Override
public void onSuccess(int arg0, Header[] arg1, byte[] arg2)
// TODO Auto-generated method stub
Toast.makeText(getActivity(), "上传成功", Toast.LENGTH_SHORT).show();
Android之网络编程
编写Android程序从网络中获取图片资源,练习AsyncHttpClient、SmartImageView等开源框架的使用。
1.编写APP程序,导入AsyncHttpClient、HttpClient、SmartImageView、Gson四个开源框架的Jar文件包。
2.搭建Tomcat网络服务器,将imgInfo.json文件部署到服务器中并测试运行效果。
3.利用AsyncHttpClient访问网络服务器,获取json文件并解析其内容。
4.利用SmartImageView通过json文件中解析出的网络地址下载图片,并在界面列表中显示图片与相应文字,界面如图所示
这次写的有些坎坷,最后还没写完,最后有一个小问题没解决,因为时间不够了,就先放上来,慢慢修改吧
先给上xml文件
homework_12.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <ListView android:id="@+id/lv_news" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout>
homework_12_2.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="65dp"> <LinearLayout android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content"> <com.loopj.android.image.SmartImageView android:id="@+id/siv_icon" android:layout_weight="4" android:layout_width="0dp" android:layout_height="180dp"/> <TextView android:id="@+id/tv_description" android:layout_gravity="center" android:textSize="24sp" android:layout_weight="6" android:layout_width="0dp" android:layout_height="wrap_content"/> </LinearLayout> </LinearLayout>
然后写java文件
mainactivity.java
package com.example.app; import androidx.appcompat.app.AppCompatActivity; import android.annotation.SuppressLint; import android.content.ContentValues; import android.content.Intent; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Color; import android.net.Uri; import android.os.AsyncTask; import android.os.Bundle; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.*; import com.google.gson.*; import com.loopj.android.http.AsyncHttpClient; import com.loopj.android.http.AsyncHttpResponseHandler; import com.loopj.android.image.SmartImage; import com.loopj.android.image.SmartImageView; import org.apache.http.Header; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.util.ArrayList; import java.util.List; public class MainActivity extends AppCompatActivity { private ListView lvNews; private List<NewsInfo> newsInfos; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.homework_12); fillData(); lvNews = (ListView) this.findViewById(R.id.lv_news); } private void fillData(){ AsyncHttpClient client = new AsyncHttpClient(); //get请求 client.get(getString(R.string.serverurl), new AsyncHttpResponseHandler() { @Override public void onSuccess(int i, Header[] headers, byte[] bytes) { //请求成功 try { newsInfos = JsonParse.getNewsInfo(bytes); if (newsInfos == null){ Toast.makeText(MainActivity.this,"解析失败",Toast.LENGTH_SHORT).show(); }else { MyBaseAdapter myAdapter = new MyBaseAdapter(); lvNews.setAdapter(myAdapter); Toast.makeText(MainActivity.this,"success",Toast.LENGTH_SHORT).show(); } } catch (IOException e) { e.printStackTrace(); Toast.makeText(MainActivity.this,"连接失败",Toast.LENGTH_SHORT).show(); } } @Override public void onFailure(int i, Header[] headers, byte[] bytes, Throwable throwable) { } }); } class MyBaseAdapter extends BaseAdapter{ @Override public int getCount() { return newsInfos.size(); } @Override public Object getItem(int position) { return newsInfos.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; if(convertView == null){ convertView = LayoutInflater.from(getApplicationContext()).inflate(R.layout.homework_12_2,parent,false); holder = new ViewHolder(); holder.mTextView = (TextView) convertView.findViewById(R.id.tv_description); holder.imageView = (SmartImageView) convertView.findViewById(R.id.siv_icon); convertView.setTag(holder); }else { holder = (ViewHolder) convertView.getTag(); } holder.mTextView.setText(newsInfos.get(position).getMessage()); holder.imageView.setImageUrl(newsInfos.get(position).getImg()); return convertView; } class ViewHolder { TextView mTextView; SmartImageView imageView; } } }
然后是JsonParse.java
package com.example.app; import com.google.gson.*; import com.google.gson.reflect.TypeToken; import java.io.IOException; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; public class JsonParse { public static List<NewsInfo> getNewsInfo(byte[] bytes) throws IOException{ String JsonParse = new String(bytes,"GBK"); Gson gson = new Gson(); List<NewsInfo> list = new ArrayList<>(); Type listType = new TypeToken<List<NewsInfo>>() { }.getType(); System.out.println(JsonParse); list = gson.fromJson(JsonParse,listType); return list; } }
还有NewsInfo.java
package com.example.app; import android.net.Uri; class NewsInfo { public String message; public String img; public void setMessage(String message){ this.message=message; } public void setImg(String img){ this.img = img; } public String getMessage(){ return message; } public String getImg(){ return img; } }
经过重重调试,到这步卡死了,实在是解决不了了。你们可以试试,也许就行了
第一步安装tomcat就不说了,我是安装在我的虚拟机上,上个本机访问的图
还有一些点,我的url是写在了配置文件里,如果不想写在这里,可以自己手动写到activity里
我大致照模板写一下
private String Port = "8080"; // 端口 private String Host = "192.168.0.1"; // 主机(本地IP) private String Path = "/android/imginfo.json"; // 文件路径 private String serverUrl = "http://" + Host + ":" + Port + Path; // 网址
然后就是AndroidManifest.xml
这里我直接放图片了
应该是这几个,有点忘了
就先写到这儿,继续解决这个问题去了。
以上是关于关于AsyncHttpClient框架的post 提交表单上传文件怎么弄的主要内容,如果未能解决你的问题,请参考以下文章
开源项目(asyncHttpClient) get post 方式提交
HttpClient和AsynchttpClient的get与post请求方式
Android网络请求框架AsyncHttpClient实例详解(配合JSON解析调用接口)
android android-async-http 上传图片,android----AsyncHttpClient的get,post和图片上传