精华内容
下载资源
问答
  • Android Studio 网络编程 OkHttp3 用法

    千次阅读 2016-09-27 18:55:59
    不得不说真是天下文章一大抄,坑真多,费了好大的劲,才成功搞定android 的http请求。 本来想用人家封装好的,发现都有各种错误,okhttp已经更新了,部分函数也变动了,博客没改,git也没改, 想想还是从基础做起,...

    不得不说真是天下文章一大抄,坑真多,费了好大的劲,才成功搞定android 的http请求。

    本来想用人家封装好的,发现都有各种错误,okhttp已经更新了,部分函数也变动了,博客没改,git也没改,

    想想还是从基础做起,慢慢封装自己的一些公用类吧。

    一、准备工作

    到官网下载最新版的okhttp.jar

    下载地址:http://square.github.io/okhttp/

    拷贝到libs文件夹,右键-Add As Library,这时需要稍等10秒钟左右,AS要构建函数库。

    添加权限:

    <!--连接网络-->
        <uses-permission android:name="android.permission.INTERNET" />
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
        <!--读写文件-->
        <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

    下边就能正式使用了。

    二、直接上代码

    /**
         * 上传文件及参数
         */
        private void sendMultipart(){
            File sdcache = getExternalCacheDir();
            int cacheSize = 10 * 1024 * 1024;
            //设置超时时间及缓存,下边都应该这样设置的。
            OkHttpClient.Builder builder = new OkHttpClient.Builder()
                    .connectTimeout(15, TimeUnit.SECONDS)
                    .writeTimeout(20, TimeUnit.SECONDS)
                    .readTimeout(20, TimeUnit.SECONDS)
                    .cache(new Cache(sdcache.getAbsoluteFile(), cacheSize));
    
            OkHttpClient mOkHttpClient=builder.build();
            RequestBody requestBody = new MultipartBody.Builder()
                    .setType(MultipartBody.FORM)
                    .addFormDataPart("title", "wangshu")//设置post的参数
                    .addFormDataPart("image", "wangshu.jpg",//如何接收图片,还在研究
                            RequestBody.create(MEDIA_TYPE_PNG, new File("/sdcard/wangshu.jpg")))
                    .build();
    
            Request request = new Request.Builder()
                    .header("Authorization", "Client-ID " + "...")
                    .url("https://***.php")//请求的url
                    .post(requestBody)
                    .build();
    
            mOkHttpClient.newCall(request).enqueue(new Callback() {
                @Override
                public void onFailure(Call call, IOException e) {
    
                }
    
                @Override
                public void onResponse(Call call, Response response) throws IOException {
                    Log.i("InfoMSG", response.body().string());
                }
            });
        }
        /**
         * 异步下载文件
         */
        private void downAsynFile() {
            OkHttpClient mOkHttpClient = new OkHttpClient();
            String url = "http://***.jpg";
            Request request = new Request.Builder().url(url).build();
            mOkHttpClient.newCall(request).enqueue(new Callback() {
                @Override
                public void onFailure(Call call, IOException e) {
    
                }
    
                @Override
                public void onResponse(Call call, Response response) {
                    InputStream inputStream = response.body().byteStream();
                    FileOutputStream fileOutputStream = null;
                    try {
                        fileOutputStream = new FileOutputStream(new File("/sdcard/123.jpg"));
                        byte[] buffer = new byte[2048];
                        int len = 0;
                        while ((len = inputStream.read(buffer)) != -1) {
                            fileOutputStream.write(buffer, 0, len);
                        }
                        fileOutputStream.flush();
                    } catch (IOException e) {
                        Log.i("InfoMSG", "IOException");
                        e.printStackTrace();
                    }
    
                    Log.d("InfoMSG", "文件下载成功");
                }
            });
        }
        /**
         * 异步上传文件
         */
        private void postAsynFile() {
            OkHttpClient mOkHttpClient=new OkHttpClient();
            File file = new File("/sdcard/123.txt");
            Request request = new Request.Builder()
                    .url("https://www.****.php")
                    .post(RequestBody.create(MEDIA_TYPE_MARKDOWN, file))
                    .build();
    
            mOkHttpClient.newCall(request).enqueue(new Callback() {
                @Override
                public void onFailure(Call call, IOException e) {
    
                }
    
                @Override
                public void onResponse(Call call, Response response) throws IOException {
                    Log.i("InfoMSG",response.body().string());
                }
            });
        }
        private void getAsynHttp() {
            OkHttpClient mOkHttpClient=new OkHttpClient();
            Request.Builder requestBuilder = new Request.Builder().url("http://www.baidu.com");
            //可以省略,默认是GET请求
            requestBuilder.method("GET",null);
            Request request = requestBuilder.build();
            Call mcall= mOkHttpClient.newCall(request);
            mcall.enqueue(new Callback() {
                @Override
                public void onFailure(Call call, IOException e) {
    
                }
    
                @Override
                public void onResponse(Call call, Response response) throws IOException {
                    if (null != response.cacheResponse()) {
                        String str = response.cacheResponse().toString();
                        Log.i("InfoMSG", "cache---" + str);
                    } else {
                        response.body().string();
                        String str = response.networkResponse().toString();
                        Log.i("InfoMSG", "network---" + str);
                    }
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            Toast.makeText(getApplicationContext(), "请求成功", Toast.LENGTH_SHORT).show();
                        }
                    });
                }
            });
        }
    
        /**
         * 异步http post数据
         */
        private void postAsynHttp() {
            OkHttpClient mOkHttpClient = new OkHttpClient();
            RequestBody formBody = new FormBody.Builder()
                    .add("tel", "10")
                    .build();
            Request request = new Request.Builder()
                    .url("http://192.168.1.105/interface/index.php")
                    .post(formBody)
                    .build();
            Call call = mOkHttpClient.newCall(request);
            call.enqueue(new Callback() {
                @Override
                public void onFailure(Call call, IOException e) {
    
                }
    
                @Override
                public void onResponse(Call call, Response response) throws IOException {
                    String str = response.body().string();
                    Log.i("InfoMSG", str);
    
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            Toast.makeText(getApplicationContext(), "请求成功", Toast.LENGTH_SHORT).show();
                        }
                    });
                }
    
            });
        }<pre name="code" class="java">/**
         * post JSON 对象
         */
        private void postJSONObj(){
            File sdcache = getExternalCacheDir();
            int cacheSize = 10 * 1024 * 1024;
            //设置超时时间及缓存
            OkHttpClient.Builder builder = new OkHttpClient.Builder()
                    .connectTimeout(15, TimeUnit.SECONDS)
                    .writeTimeout(20, TimeUnit.SECONDS)
                    .readTimeout(20, TimeUnit.SECONDS)
                    .cache(new Cache(sdcache.getAbsoluteFile(), cacheSize));
    
            OkHttpClient mOkHttpClient=builder.build();
           
            RequestBody requestBody1=RequestBody.create(JSON,"\"user\":\"abc\"");
            Request request = new Request.Builder()
                    .url("https://***.php")
                    .post(requestBody1)
                    .build();
    
            mOkHttpClient.newCall(request).enqueue(new Callback() {
                @Override
                public void onFailure(Call call, IOException e) {
    
                }
    
                @Override
                public void onResponse(Call call, Response response) throws IOException {
                    Log.i("InfoMSG", response.body().string());
                }
            });
        }

    
    三、服务器接收
    

    $_REQUEST["tel"]//接收post的参数
    $GLOBALS["HTTP_RAW_POST_DATA"]//接收json对象

    1、上传图片

    $act = $_GET["action"];
    if ($act == "postimg") {
    	$content = file_get_contents("php://input");
    
    	$imgName = time();
    	$folder = "images";
    	$file_dir = $folder . "/" . $imgName . ".jpg";
    	try {
    		if (!file_exists($folder)) {//判断目录是否存在
    			mkdir($folder);//创建目录
    		}
    		if ($fp = fopen($file_dir, 'w')) {
    			if (fwrite($fp, $content)) {//写入文件
    				fclose($fp);
    			}
    		}
    	} catch(Exception $ex) {
    		echo "".$ex;
    	}
    	echo "图片上传成功";
    }



    其他用法逐步尝试整理。











    展开全文
  • 不得不说真是天下文章一大抄,坑真多,费了好大的劲,才成功搞定android 的http请求。本来想用人家封装好的,发现都有各种错误,okhttp已经更新了,部分函数也变动了,博客没改,git也没改,想想还是从基础做起,...

    不得不说真是天下文章一大抄,坑真多,费了好大的劲,才成功搞定android 的http请求。

    本来想用人家封装好的,发现都有各种错误,okhttp已经更新了,部分函数也变动了,博客没改,git也没改,

    想想还是从基础做起,慢慢封装自己的一些公用类吧。

    一、准备工作

    到官网下载最新版的okhttp.jar

    下载地址:http://square.github.io/okhttp/

    拷贝到libs文件夹,右键-Add As Library,这时需要稍等10秒钟左右,AS要构建函数库。

    添加权限:

    下边就能正式使用了。

    二、直接上代码

    /**

    * 上传文件及参数

    */

    private void sendMultipart(){

    File sdcache = getExternalCacheDir();

    int cacheSize = 10 * 1024 * 1024;

    //设置超时时间及缓存,下边都应该这样设置的。

    OkHttpClient.Builder builder = new OkHttpClient.Builder()

    .connectTimeout(15, TimeUnit.SECONDS)

    .writeTimeout(20, TimeUnit.SECONDS)

    .readTimeout(20, TimeUnit.SECONDS)

    .cache(new Cache(sdcache.getAbsoluteFile(), cacheSize));

    OkHttpClient mOkHttpClient=builder.build();

    RequestBody requestBody = new MultipartBody.Builder()

    .setType(MultipartBody.FORM)

    .addFormDataPart("title", "wangshu")//设置post的参数

    .addFormDataPart("image", "wangshu.jpg",//如何接收图片,还在研究

    RequestBody.create(MEDIA_TYPE_PNG, new File("/sdcard/wangshu.jpg")))

    .build();

    Request request = new Request.Builder()

    .header("Authorization", "Client-ID " + "...")

    .url("https://***.php")//请求的url

    .post(requestBody)

    .build();

    mOkHttpClient.newCall(request).enqueue(new Callback() {

    @Override

    public void onFailure(Call call, IOException e) {

    }

    @Override

    public void onResponse(Call call, Response response) throws IOException {

    Log.i("InfoMSG", response.body().string());

    }

    });

    }

    /**

    * 异步下载文件

    */

    private void downAsynFile() {

    OkHttpClient mOkHttpClient = new OkHttpClient();

    String url = "http://***.jpg";

    Request request = new Request.Builder().url(url).build();

    mOkHttpClient.newCall(request).enqueue(new Callback() {

    @Override

    public void onFailure(Call call, IOException e) {

    }

    @Override

    public void onResponse(Call call, Response response) {

    InputStream inputStream = response.body().byteStream();

    FileOutputStream fileOutputStream = null;

    try {

    fileOutputStream = new FileOutputStream(new File("/sdcard/123.jpg"));

    byte[] buffer = new byte[2048];

    int len = 0;

    while ((len = inputStream.read(buffer)) != -1) {

    fileOutputStream.write(buffer, 0, len);

    }

    fileOutputStream.flush();

    } catch (IOException e) {

    Log.i("InfoMSG", "IOException");

    e.printStackTrace();

    }

    Log.d("InfoMSG", "文件下载成功");

    }

    });

    }

    /**

    * 异步上传文件

    */

    private void postAsynFile() {

    OkHttpClient mOkHttpClient=new OkHttpClient();

    File file = new File("/sdcard/123.txt");

    Request request = new Request.Builder()

    .url("https://www.****.php")

    .post(RequestBody.create(MEDIA_TYPE_MARKDOWN, file))

    .build();

    mOkHttpClient.newCall(request).enqueue(new Callback() {

    @Override

    public void onFailure(Call call, IOException e) {

    }

    @Override

    public void onResponse(Call call, Response response) throws IOException {

    Log.i("InfoMSG",response.body().string());

    }

    });

    }

    private void getAsynHttp() {

    OkHttpClient mOkHttpClient=new OkHttpClient();

    Request.Builder requestBuilder = new Request.Builder().url("http://www.baidu.com");

    //可以省略,默认是GET请求

    requestBuilder.method("GET",null);

    Request request = requestBuilder.build();

    Call mcall= mOkHttpClient.newCall(request);

    mcall.enqueue(new Callback() {

    @Override

    public void onFailure(Call call, IOException e) {

    }

    @Override

    public void onResponse(Call call, Response response) throws IOException {

    if (null != response.cacheResponse()) {

    String str = response.cacheResponse().toString();

    Log.i("InfoMSG", "cache---" + str);

    } else {

    response.body().string();

    String str = response.networkResponse().toString();

    Log.i("InfoMSG", "network---" + str);

    }

    runOnUiThread(new Runnable() {

    @Override

    public void run() {

    Toast.makeText(getApplicationContext(), "请求成功", Toast.LENGTH_SHORT).show();

    }

    });

    }

    });

    }

    /**

    * 异步http post数据

    */

    private void postAsynHttp() {

    OkHttpClient mOkHttpClient = new OkHttpClient();

    RequestBody formBody = new FormBody.Builder()

    .add("tel", "10")

    .build();

    Request request = new Request.Builder()

    .url("http://192.168.1.105/interface/index.php")

    .post(formBody)

    .build();

    Call call = mOkHttpClient.newCall(request);

    call.enqueue(new Callback() {

    @Override

    public void onFailure(Call call, IOException e) {

    }

    @Override

    public void onResponse(Call call, Response response) throws IOException {

    String str = response.body().string();

    Log.i("InfoMSG", str);

    runOnUiThread(new Runnable() {

    @Override

    public void run() {

    Toast.makeText(getApplicationContext(), "请求成功", Toast.LENGTH_SHORT).show();

    }

    });

    }

    });

    }

    /**

    * post JSON 对象

    */

    private void postJSONObj(){

    File sdcache = getExternalCacheDir();

    int cacheSize = 10 * 1024 * 1024;

    //设置超时时间及缓存

    OkHttpClient.Builder builder = new OkHttpClient.Builder()

    .connectTimeout(15, TimeUnit.SECONDS)

    .writeTimeout(20, TimeUnit.SECONDS)

    .readTimeout(20, TimeUnit.SECONDS)

    .cache(new Cache(sdcache.getAbsoluteFile(), cacheSize));

    OkHttpClient mOkHttpClient=builder.build();

    RequestBody requestBody1=RequestBody.create(JSON,"\"user\":\"abc\"");

    Request request = new Request.Builder()

    .url("https://***.php")

    .post(requestBody1)

    .build();

    mOkHttpClient.newCall(request).enqueue(new Callback() {

    @Override

    public void onFailure(Call call, IOException e) {

    }

    @Override

    public void onResponse(Call call, Response response) throws IOException {

    Log.i("InfoMSG", response.body().string());

    }

    });

    }

    三、服务器接收

    $_REQUEST["tel"]//接收post的参数

    $GLOBALS["HTTP_RAW_POST_DATA"]//接收json对象

    1、上传图片

    $act = $_GET["action"];

    if ($act == "postimg") {

    $content = file_get_contents("php://input");

    $imgName = time();

    $folder = "images";

    $file_dir = $folder . "/" . $imgName . ".jpg";

    try {

    if (!file_exists($folder)) {//判断目录是否存在

    mkdir($folder);//创建目录

    }

    if ($fp = fopen($file_dir, 'w')) {

    if (fwrite($fp, $content)) {//写入文件

    fclose($fp);

    }

    }

    } catch(Exception $ex) {

    echo "".$ex;

    }

    echo "图片上传成功";

    } 其他用法逐步尝试整理。

    展开全文
  • Android Studio网络编程Android studio中,有时候需要获取HTTP请求,简单点来说就是从服务器中获取相关资源和信息。HTTP协议定义了很多于服务器交互的方法,即HTTP请求的种类中,最基本的有4种,分别是GET、...

    Android Studio之网络编程

    在Android studio中,有时候需要获取HTTP请求,简单点来说就是从服务器中获取相关资源和信息。HTTP协议定义了很多于服务器交互的方法,即HTTP请求的种类中,最基本的有4种,分别是GET、POST、PUT、DELETE。一个URL地址用于描述一个网络上的资源,而HTTP中GET、POST、PUT、DELETE就对应着对这个资源的查、改、增、删4个操作,我们最常见的就是GET和POST了。

    • GET:通过请求URL得到资源。一般用于获取/查询资源信息。
    • POST:用于向服务器提交新的内容。一般用于更新资源信息。
    一 网络请求常见用法

    在Android中,我们在很多时候都需要用到网络请求,最常见的地方就是我们在布局Recyclerview的时候,这时候我们界面需要的数据要从后台服务器取获取。

    二 如何进行网络请求

    在Android studio中我们要进行网络请求的话,必须先设置相关的依赖。

    在AndroidManifest.xml文件中增添这两句代码。

    (1)能够进行网络访问请求:

    <uses-permission android:name="android.permission.INTERNET"/>
    

    (2)能够访问以https开头的网络图片:

    android:usesCleartextTraffic="true"
    

    然后在build.gradle文件中导入相关依赖。

    (1)能够访问网络图片:

    implementation 'com.github.bumptech.glide:glide:4.12.0'
    annotationProcessor 'com.github.bumptech.glide:compiler:4.12.0'
    

    (2)能够访问gson格式数据:

    implementation 'com.google.code.gson:gson:2.8.6'
    implementation 'org.xutils:xutils:3.9.0'
    

    三 具体代码实现

    这里举例了三种类型的json的数据类型:

    • 单独的json

    • json中带json

    • json中嵌套数组

    1 利用json去实现

    在MainActivity的**protected void onCreate(Bundle savedInstanceState){}**的方法中写入一下代码

    TextView textView = findViewById(R.id.text);
    //        默认在主线程中更新UI,但在主线程中不能执行耗时操作
    //        耗时操作  ->网络访问、文件读取
    //        NetworkOnMainThreadException   网络主线程异常
    //          网络访问请求不应该放到主线程中
            TextView textView = findViewById(R.id.text);
    //        新建一个线程
            Thread thread = new Thread(new Runnable() {
                @Override
                public void run() {
    //                在这里执行的都是子线程
                    try {
                        URL url = new URL("http://148.70.46.9/object3");//user   object     array    object1
                        HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
                        urlConnection.setRequestMethod("GET");
    //
                        InputStream inputStream = urlConnection.getInputStream();// 字节流
                        Reader reader = new InputStreamReader(inputStream);//字符流
                        BufferedReader bufferedReader = new BufferedReader(reader);// 缓存流  一次读取更多
                        String result = "";
                        String temp;
                        while ((temp = bufferedReader.readLine()) != null) {
                            result += temp;
                        }
                        Thread.sleep(2000);
                        Log.i("MainActivity", result);
    //                    子线程不能更新UI
    //                    更新UI操作   ->只能放到子线程中
    //                    切回主线程
                        String finalResult = result;
                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                //主线程中
    
    //                            对json数据格式进行解析
    //                            try {
    //                                JSONObject jsonObject = new JSONObject(finalResult);
    //                                String s = jsonObject.getString("name");
    //                                textView.setText(s);
    //                            } catch (JSONException e) {
    //                                e.printStackTrace();
    //                            }
    
    //                            对数组格式进行解析
    //                            try {
    //                                JSONArray jsonArray = new JSONArray(finalResult);
    //                                for(int i=0;i<jsonArray.length();i++) {
    //                                    String s = (String) jsonArray.get(i);
    //                                    Log.i("MainActivity", "S==" + s);
    //                                }
    //                            } catch (JSONException e) {
    //                                e.printStackTrace();
    //                            }
    
    //                            try {
    //                                JSONObject jsonObject = new JSONObject(finalResult);
    //                                JSONObject jsonObject1 = jsonObject.getJSONObject("class");
    //                                String classname = jsonObject1.getString("classname");
    //                                textView.setText(classname);
    //                            } catch (JSONException e) {
    //                                e.printStackTrace();
    //                            }
    //                            解析JSON嵌套数组JSON
                                try {
                                    JSONObject jsonObject = new JSONObject(finalResult);
                                    JSONArray jsonArray = jsonObject.getJSONArray("students");
                                    for(int i=0;i<jsonArray.length();i++){
                                        JSONObject jsonObject1 = jsonArray.getJSONObject(i);
                                        String s = jsonObject1.getString("name");
                                        Log.i("MainActivity","S=="+s);
                                    }
                                } catch (JSONException e) {
                                    e.printStackTrace();
                                }
    
    //                            textView.setText(finalResult);
                            }
                        });
                        inputStream.close();
                        reader.close();
                        bufferedReader.close();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
    
    
                }
            });
            thread.start();
    
    2 利用gson去实现

    gson在Android中能够更加方便的去服务器获取数据资源。先要根据你的json的数据类型去创建一个类,你能够手动创建也能够借助插件去创建。

    如果借助插件去创建的话,先在setting中下载一个gson插件。

    然后就是代码展示了,也是三种json类型,也是在**protected void onCreate(Bundle savedInstanceState){}**方法中。

    TextView textView = findViewById(R.id.text);
    
            x.Ext.init(getApplication());
            //URL
            RequestParams requestParams = new RequestParams("http://148.70.46.9/object1");
            x.http().get(requestParams, new Callback.CommonCallback<String>() {
                @Override
                public void onSuccess(String result) {//请求正常
                    Log.i("MainActivity","result:"+result);
                    //自动切回主线程
    //                textView.setText(result);
    
                    Gson gson = new Gson();//Gson更快的解析Json文件
                    Student student = gson.fromJson(result,Student.class);
                    textView.setText(student.classX.classname);
                }
    
                @Override
                public void onError(Throwable ex, boolean isOnCallback) {//请求异常  可能访问的网址错误
                    Log.i("MainActivity","onError");
                    Toast.makeText(MainActivity.this,"网络异常",Toast.LENGTH_SHORT).show();
                }
    
                @Override
                public void onCancelled(CancelledException cex) {
    
                }
    
                @Override
                public void onFinished() {
    
                }
            });
    
    四 如果网络请求在fragment中

    如果网络请求在fragment中的话,代码操作跟在Mainactivity中有些不一样,我就以我做到app界面举例。首先要在Mainactivity中写下这条网络请求初始化语句:

    x.Ext.init(getApplication());
    

    然后再在你所需要网络请求的fragment中==onActivityCreated(){}==方法中写在网络请求的代码:

    RequestParams requestParams = new RequestParams("https://www.fastmock.site/mock/6feea46f0662885e32328be397a9264b/mywork/mywork6");
    
            x.http().get(requestParams, new Callback.CommonCallback<String>() {
                @Override
                public void onSuccess(String result) {//请求正常
                    Log.i("MainActivity","result:"+result);
                    //自动切回主线程
    //                textView.setText(result);
    
                    Gson gson = new Gson();//Gson更快的解析Json文件
    
                    MovieList movielist = gson.fromJson(result,MovieList.class);
    
                    list1.addAll(movielist.malorie);
                    Log.i("MainActivity","我快成功了");
                    myAdapter.notifyDataSetChanged();
    
                }
    
                @Override
                public void onError(Throwable ex, boolean isOnCallback) {//请求异常  可能访问的网址错误
                    Log.i("MainActivity","onError");
                    Toast.makeText(getActivity(),"网络异常",Toast.LENGTH_SHORT).show();
                }
    
                @Override
                public void onCancelled(CancelledException cex) {
    
                }
    
                @Override
                public void onFinished() {
    
                }
            });
    

    下面就是的我的app界面运行展示:

    然后附上关键的代码

    1 Mainactivity的代码

    package com.huncm.c19;
    
    import androidx.appcompat.app.AppCompatActivity;
    import androidx.constraintlayout.widget.ConstraintLayout;
    
    import android.os.Bundle;
    import android.view.View;
    
    import org.xutils.x;
    
    public class MainActivity extends AppCompatActivity {
    
        SyFragment syFragment = new SyFragment();
        ZqFragment zqFragment = new ZqFragment();
        WdFragment wdFragment = new WdFragment();
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            x.Ext.init(getApplication());
    
            ConstraintLayout constraintLayout = findViewById(R.id.constraintLayout2);
            ConstraintLayout constraintLayout1 = findViewById(R.id.constraintLayout);
            ConstraintLayout constraintLayout2 = findViewById(R.id.constraintLayout3);
            constraintLayout.setSelected(true);
            constraintLayout1.setSelected(false);
            constraintLayout2.setSelected(false);
            getSupportFragmentManager().beginTransaction().replace(R.id.fragment,syFragment).commit();
    
            constraintLayout.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    getSupportFragmentManager().beginTransaction().replace(R.id.fragment,syFragment).commit();
                    constraintLayout.setSelected(true);
                    constraintLayout1.setSelected(false);
                    constraintLayout2.setSelected(false);
                }
            });
    
    
            constraintLayout1.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    getSupportFragmentManager().beginTransaction().replace(R.id.fragment,zqFragment).commit();
                    constraintLayout.setSelected(false);
                    constraintLayout1.setSelected(true);
                    constraintLayout2.setSelected(false);
                }
            });
    
    
            constraintLayout2.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    constraintLayout.setSelected(false);
                    constraintLayout1.setSelected(false);
                    constraintLayout2.setSelected(true);
                    getSupportFragmentManager().beginTransaction().replace(R.id.fragment,wdFragment).commit();
                }
            });
        }
    }
    

    2 fragment的代码

    package com.huncm.c19;
    
    import android.os.Bundle;
    
    import androidx.annotation.NonNull;
    import androidx.annotation.Nullable;
    import androidx.fragment.app.Fragment;
    import androidx.recyclerview.widget.LinearLayoutManager;
    import androidx.recyclerview.widget.RecyclerView;
    
    import android.util.Log;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.ImageView;
    import android.widget.TextView;
    import android.widget.Toast;
    
    import com.bumptech.glide.Glide;
    import com.google.gson.Gson;
    import com.scwang.smart.refresh.footer.BallPulseFooter;
    import com.scwang.smart.refresh.header.TwoLevelHeader;
    import com.scwang.smart.refresh.layout.SmartRefreshLayout;
    import com.scwang.smart.refresh.layout.api.RefreshLayout;
    import com.scwang.smart.refresh.layout.listener.OnLoadMoreListener;
    import com.scwang.smart.refresh.layout.listener.OnRefreshListener;
    
    import org.xutils.common.Callback;
    import org.xutils.http.RequestParams;
    import org.xutils.x;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class SyFragment extends Fragment {
    
        RecyclerView recyclerView;
        MyAdapter myAdapter;
        SmartRefreshLayout smartRefreshLayout;
        List<Movie> list1 = new ArrayList<>();
    
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
            View view = inflater.inflate(R.layout.fragment_sy, container, false);
            return view;
        }
    
        @Override
        public void onActivityCreated(@Nullable Bundle savedInstanceState) {
            super.onActivityCreated(savedInstanceState);
            recyclerView = getActivity().findViewById(R.id.recyclerview);
            // 无下拉功能
    //         上拉刷新  数据到底 重新加载新数据
    //        开源
            myAdapter = new MyAdapter();
            recyclerView.setAdapter(myAdapter);
            recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
    
            smartRefreshLayout = getActivity().findViewById(R.id.smartReshesh);
            smartRefreshLayout.setRefreshFooter(new BallPulseFooter(getActivity()));
            smartRefreshLayout.setRefreshHeader(new TwoLevelHeader(getActivity()));
            smartRefreshLayout.setOnRefreshListener(new OnRefreshListener() {
                @Override
                public void onRefresh(@NonNull RefreshLayout refreshLayout) {
    //                 todo  清楚数据
                    //Movielist.clear();
                    refreshLayout.finishRefresh(2000/*,false*/);//传入false表示刷新失败
    // 重新添加数据
    
                    myAdapter.notifyDataSetChanged();
                }
            });
    
            smartRefreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() {
                @Override
                public void onLoadMore(@NonNull RefreshLayout refreshLayout) {
    //                     todo  添加数据
    
                    refreshLayout.finishLoadMore(2000/*,false*/);//传入false表示加载失败
                    myAdapter.notifyDataSetChanged();
                }
            });
    
            RequestParams requestParams = new RequestParams("https://www.fastmock.site/mock/6feea46f0662885e32328be397a9264b/mywork/mywork6");
    
            x.http().get(requestParams, new Callback.CommonCallback<String>() {
                @Override
                public void onSuccess(String result) {//请求正常
                    Log.i("MainActivity","result:"+result);
                    //自动切回主线程
    //                textView.setText(result);
    
                    Gson gson = new Gson();//Gson更快的解析Json文件
    
                    MovieList movielist = gson.fromJson(result,MovieList.class);
    
                    list1.addAll(movielist.malorie);
                    Log.i("MainActivity","我快成功了");
                    myAdapter.notifyDataSetChanged();
    
                }
    
                @Override
                public void onError(Throwable ex, boolean isOnCallback) {//请求异常  可能访问的网址错误
                    Log.i("MainActivity","onError");
                    Toast.makeText(getActivity(),"网络异常",Toast.LENGTH_SHORT).show();
                }
    
                @Override
                public void onCancelled(CancelledException cex) {
    
                }
    
                @Override
                public void onFinished() {
    
                }
            });
    
        }
    
    
        public class MyAdapter extends RecyclerView.Adapter<MyViewHolder> {
    
            @NonNull
            @Override
            public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
                View view = LayoutInflater.from(getActivity()).inflate(R.layout.item_list, parent, false);
                MyViewHolder myViewHolder = new MyViewHolder(view);
                return myViewHolder;
            }
    
            @Override
            public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
                Glide.with(getActivity()).load(list1.get(position).head1).into(holder.head1);
                Glide.with(getActivity()).load(list1.get(position).head2).into(holder.head2);
                Glide.with(getActivity()).load(list1.get(position).head3).into(holder.head3);
                Glide.with(getActivity()).load(list1.get(position).head4).into(holder.head4);
                Glide.with(getActivity()).load(list1.get(position).head5).into(holder.head5);
                holder.name1.setText(list1.get(position).name1);
                holder.name2.setText(list1.get(position).name2);
                holder.name3.setText(list1.get(position).name3);
                holder.name4.setText(list1.get(position).name4);
                holder.name5.setText(list1.get(position).name5);
                holder.drp1.setText(list1.get(position).drp1);
                holder.drp2.setText(list1.get(position).drp2);
                holder.drp3.setText(list1.get(position).drp3);
                holder.drp4.setText(list1.get(position).drp4);
                holder.drp5.setText(list1.get(position).drp5);
    //            holder.imageView.setImageResource(chatList.get(position).getImg());
    //            fragment getActivity()
    //            acitivity   this    类名.this
            }
    
            @Override
            public int getItemCount() {
                return list1.size();
            }
        }
    
    
        public class MyViewHolder extends RecyclerView.ViewHolder {
            ImageView head1;
            TextView name1;
            TextView drp1;
            ImageView head2;
            TextView name2;
            TextView drp2;
            ImageView head3;
            TextView name3;
            TextView drp3;
            ImageView head4;
            TextView name4;
            TextView drp4;
            ImageView head5;
            TextView name5;
            TextView drp5;
    
            public MyViewHolder(@NonNull View itemView) {
                super(itemView);
                head1 = itemView.findViewById(R.id.tp1);
                head2 = itemView.findViewById(R.id.tp2);
                head3 = itemView.findViewById(R.id.tp3);
                head4 = itemView.findViewById(R.id.tp4);
                head5 = itemView.findViewById(R.id.tp5);
                name1 = itemView.findViewById(R.id.wa1);
                name2 = itemView.findViewById(R.id.wb1);
                name3 = itemView.findViewById(R.id.wc1);
                name4 = itemView.findViewById(R.id.wd1);
                name5 = itemView.findViewById(R.id.we1);
                drp1 = itemView.findViewById(R.id.textView7);
                drp2 = itemView.findViewById(R.id.wb2);
                drp3 = itemView.findViewById(R.id.wc2);
                drp4 = itemView.findViewById(R.id.wd2);
                drp5 = itemView.findViewById(R.id.we2);
            }
        }
    
    }
    
    展开全文
  • Android Studio使用HttpURLConnection进行网络编程时出错,求各位大神解决 错误如下:

    Android Studio使用HttpURLConnection进行网络编程时出错,求各位大神解决


    错误如下:
    在这里插入图片描述

    展开全文
  • ;目录;;;;;;;7.2解析JSON格式数据;;使用Activity类中的 getPreferences方法获取如果Activity仅需要一个SharedPreferences文件,则可以使用getPreferences方法获取。因为只有一个文件,所以不需要提供名称。...
  • Android Studio中使用Volley框架,首先要导入Volley到项目中去。 点击主界面左上角File ,点击Project Structure ,在Modules下,点击app,然后点击Dependencies,然后点击右边的那个"+"号。如下图: ...
  • Android Studio下载更新Android SDK网络异常或无法下载 今天重新安装了下Android Studio,在安装SDK时老是提示网络异常,于是上网查了下, 解决方法如下:HTTP Proxy中Host name设置为mirrors.neusoft.edu.cn 再...
  • Android_Studio_Intro 显然,eclipe (ADT) 过时了……所以我下载了 Android studio 并开始玩 这个简单的应用程序展示了 Android 应用程序生命周期、简单的 UI 和一些基本的 api,如位置和联系人。 查看 Wiki 了解...
  • 本项目使用AndroidStudio进行编程 1.通过POST请求控制树莓派控制下LED灯的亮灭 2.使用定时器,通过GET请求获取DS18B20温度传感器获取的温度和湿度信息(JSON格式),并对JSON解析并将其显示在TextView上 3.使用百度...
  • 本书以AndroidStudio为开发工具,详细全面地介绍了Android编程的核心技术,包括Android用户界面编程、Android四大组件、数据存储、事件处理、网络与数据处理、图形图像处理、多媒体开发等知识。本书不限于介绍...
  • 前言 ...当然,看这篇文章前建议看一下前一篇文章Android网络编程(五)OkHttp2.x用法全解析。 1.使用前准备 Android Studio 配置gradle: compile 'com.squareup.okhttp3:okhttp:3.2.0
  • Android客户端Android Studio配置前期准备发送网络请求对OkHttpClient进行简单封装 Android Studio配置 新建Android Studio工程。 最重要的一步:添加网络权限!添加网络权限!!。还记得当时debug的时候,后面...
  • Android Studio实现多媒体播放器

    千次阅读 多人点赞 2020-06-23 19:55:04
    本次项目综合了Android几乎所有知识,可以让大家熟练掌握Android程序开发的基本技术,涉及Android 基础知识、UI界面、数据存储、四大组件、网络编程、高级编程、多媒体播放器、适配器配置等。大家熟练掌握可以对以后...
  • 本书对Android技术进行深入剖析和全面讲解,内容涵盖Android基本理论、Activity、基础UI编程、高级UI编程、Intent、BroadcastReceiver、SQLite数据存储、ContentProvider数据共享、Service服务及网络编程等。...
  • 1.HttpClient Android SDK中包含了HttpClient,但Android6.0版本直接删除了HttpClient类库 eclipse: 在libs中加入org.... android studio: 在相应的module下的build.gradle中加入: android { useLibrary 'o
  • 当然,看这篇文章前建议看一下前一篇文章Android网络编程(五)OkHttp2.x用法全解析。1.使用前准备Android Studio 配置gradle:compile 'com.squareup.okhttp3:okhttp:3.2.0' compile 'com.s...
  • 环境:android studio,小米8. 本来我是想写一个菜谱app,然后中间我要取网页的源代码。 效果图: 我取的网页编码是gb2312格式,取其他的格式更换方法编码就行。 取源代码首先给xml里面加网络访问权限。 &l...
  • 前言 上一篇介绍了OkHttp2.x的用法,这一篇文章我们来...当然,看这篇文章前建议看一下前一篇文章Android网络编程(五)OkHttp2.x用法全解析。 1.使用前准备 Android Studio 配置gradle: compile 'com.squareup....
  • 1.Android studio的安装 百度搜索Android studio 官网下载速度会比较慢,所以...在这里就是要配置一些studio所需要的插件,选择finish,保持电脑网络状态良好,然后自动开始下载,时间略微长了一些,请耐心等待。 安装
  • 1.使用前准备 ...Android Studio 配置gradle: compile 'com.squareup.okhttp3:okhttp:3.2.0'compile 'com.squareup.okio:okio:1.7.0' 添加网络权限: uses-permission android:name="android.per
  • Android Studio 配置gradle: compile 'com.squareup.okhttp3:okhttp:3.9.1' 添加网络权限: uses-permission android:name="android.permission.INTERNET"/> 2.异步GET请求 惯例,...
  • 前言 ...当然,看这篇文章前建议看一下前一篇文章Android网络编程(五)OkHttp2.x用法全解析。 1.使用前准备 Android Studio 配置gradle: compile 'com.squareup.okhttp3:okhttp:3.2.0
  • 深入理解Android网络编程——学习笔记(一) 平台:Android Stduio SDK:27 参考文献:http://android-doc.com/ 1、加载一个Web页面 (1)在AS(Android Studio)中创建项目 (2)添加字符串。在字符串文件 \res...
  • 我现在是用的AndroidStudio3.4,后期新版本添加依赖的方式可能有变动,如果下面这个不能用可以去百度查一下对应版本如何添加依赖。 implementation 'com.squareup.okhttp3:okhttp:3.4.1' 发起一条HTTP请求 0.若发送...

空空如也

空空如也

1 2 3 4 5 ... 8
收藏数 156
精华内容 62
关键字:

androidstudio网络编程