Ver Fonte

1.修改Android RedAnt Mobile Result,增加文件下载。

Pen Li há 8 anos atrás
pai
commit
9888c90df4

+ 10 - 1
RedAnt Mobile/app/src/main/AndroidManifest.xml

@@ -229,7 +229,16 @@
             android:name="com.usai.redant.Search.RamSearchSettingActivity"
             android:theme="@style/Theme.AppCompat.Light">
         </activity>
-        <activity android:name="com.usai.redant.CommonEditor.EnumSelectAndSort.EnumSelectAndSortActivity"
+        <activity
+            android:name="com.usai.redant.CommonEditor.EnumSelectAndSort.EnumSelectAndSortActivity"
+            android:theme="@style/Theme.AppCompat.Light">
+        </activity>
+
+        <!-- Detail -->
+        <activity android:name="com.usai.redant.Detail.KVDetailActivity"
+                  android:theme="@style/Theme.AppCompat.Light">
+        </activity>
+        <activity android:name="com.usai.redant.Detail.OrderDetailActivity"
                   android:theme="@style/Theme.AppCompat.Light">
         </activity>
     </application>

+ 21 - 0
RedAnt Mobile/app/src/main/java/com/usai/redant/CommonEditor/CommonEditorActivity.java

@@ -154,6 +154,27 @@ public class CommonEditorActivity extends AppCompatActivity implements View.OnLa
         outState.putBundle("params",selfParams);
     }
 
+    public static Intent build(Context context,Class cls,int URLType,String requestURL,Bundle params) {
+
+        if (context == null || cls == null) {
+            return null;
+        }
+
+        Intent intent = new Intent(context,cls);
+
+        intent.putExtra("url_type",URLType);
+
+        if (requestURL != null) {
+            intent.putExtra("request_url",requestURL);
+        }
+
+        if (params != null) {
+            intent.putExtra("params",params);
+        }
+
+        return intent;
+    }
+
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);

+ 41 - 0
RedAnt Mobile/app/src/main/java/com/usai/redant/Detail/KVDetailActivity.java

@@ -0,0 +1,41 @@
+package com.usai.redant.Detail;
+
+import android.content.Context;
+import android.content.Intent;
+import android.support.v7.app.AppCompatActivity;
+import android.os.Bundle;
+
+import com.usai.redant.redantmobile.R;
+
+import org.json.JSONException;
+import org.json.JSONObject;
+
+public class KVDetailActivity extends AppCompatActivity {
+
+    public static Intent build(Context context,String content_json_str) {
+
+        Intent intent = new Intent(context,KVDetailActivity.class);
+
+        if (content_json_str != null) {
+            intent.putExtra("content",content_json_str);
+        }
+
+        return intent;
+    }
+
+    JSONObject mContent;
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.activity_kvdetail);
+
+        String content_json_str = getIntent().getStringExtra("content");
+        if (content_json_str != null) {
+            try {
+                mContent = new JSONObject(content_json_str);
+            } catch (JSONException e) {
+                e.printStackTrace();
+            }
+        }
+    }
+}

+ 35 - 0
RedAnt Mobile/app/src/main/java/com/usai/redant/Detail/OrderDetailActivity.java

@@ -0,0 +1,35 @@
+package com.usai.redant.Detail;
+
+import android.content.Context;
+import android.support.v7.app.AppCompatActivity;
+import android.os.Bundle;
+
+import com.usai.redant.CommonEditor.CommonEditorActivity;
+import com.usai.redant.redantmobile.R;
+import com.usai.redant.util.Network;
+
+import org.json.JSONObject;
+
+public class OrderDetailActivity extends CommonEditorActivity {
+
+    private Context mContext;
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+
+
+        mContext = this;
+
+        hasChildView = true;
+        setContentView(R.layout.activity_order_detail);
+
+        super.onCreate(savedInstanceState);
+    }
+
+
+
+    @Override
+    public JSONObject request_editor(String request_url, Bundle params) {
+
+        return Network.require_orderdetail(request_url,params);
+    }
+}

+ 72 - 27
RedAnt Mobile/app/src/main/java/com/usai/redant/Result/SearchResultActivity.java

@@ -31,9 +31,12 @@ import android.widget.RelativeLayout;
 import android.widget.TableRow;
 import android.widget.TextView;
 
+import com.usai.redant.Detail.KVDetailActivity;
+import com.usai.redant.Detail.OrderDetailActivity;
 import com.usai.redant.redantmobile.BuildConfig;
 import com.usai.redant.redantmobile.R;
 import com.usai.redant.util.Network;
+import com.usai.redant.util.RAUtil;
 
 import org.json.JSONArray;
 import org.json.JSONException;
@@ -43,6 +46,8 @@ import java.io.InputStream;
 import java.util.ArrayList;
 import java.util.Iterator;
 
+import static com.usai.redant.CommonEditor.CommonEditorActivity.URL_REMOTE;
+
 
 public class SearchResultActivity extends AppCompatActivity implements AbsListView.OnScrollListener {
 
@@ -918,7 +923,7 @@ public class SearchResultActivity extends AppCompatActivity implements AbsListVi
 
     private String documentPath;
     private String download_query;
-    private void export(String url) {
+    private void export(final String download_url) {
 
         if (download_query != null) {
             documentPath = download_query;
@@ -927,23 +932,26 @@ public class SearchResultActivity extends AppCompatActivity implements AbsListVi
             return;
         }
 
+        showProgressDialog(null,"Please wait");
         new Thread(new Runnable() {
             @Override
             public void run() {
 
                 // download & get path
-                String path = Network.download_query(mParams);
+                final String path = Network.download_query(download_url);
 
 
                 documentPath = path;
                 download_query = path;
 
+
                 if (path != null) {
                     runOnUiThread(new Runnable() {
                         @Override
                         public void run() {
+                            progressDialog.dismiss();
                             Uri uri= Uri.parse(documentPath);
-                            openFileAtPath(uri,"*/*");
+                            openFileAtPath(uri,RAUtil.getMimeType(documentPath));
                         }
                     });
                 }
@@ -964,37 +972,74 @@ public class SearchResultActivity extends AppCompatActivity implements AbsListVi
     }
 
     public void showOrderDetail() {
-        if(BuildConfig.DEBUG && true){
-            //do something for assert aim
-            Log.e("Result", "showOrderDetail: not implement");
-        }
+        Intent intent = OrderDetailActivity.build(mContext,OrderDetailActivity.class,URL_REMOTE,null,new Bundle());
+
+        startActivity(intent);
     }
 
-    public void showKVDetail(JSONObject param) {
-        if(BuildConfig.DEBUG && true){
-            //do something for assert aim
-            Log.e("Result", "showKVDetail: not implement");
-        }
+    public void showKVDetail(final JSONObject param) {
+        showProgressDialog("Please wait","Loading...");
+
+        new Thread(new Runnable() {
+            @Override
+            public void run() {
+
+                final JSONObject json = Network.kv_detail(RAUtil.Json2Bundle(param));
+
+                runOnUiThread(new Runnable() {
+                    @Override
+                    public void run() {
+                        progressDialog.dismiss();
+
+                        int result = json.optInt("result",0);
+                        if (result == 2) {
+
+                            Intent intent = KVDetailActivity.build(mContext,json.toString());
+
+                            startActivity(intent);
+
+                        } else {
+                            String msg = json.optString("msg");
+                            if (msg == null) {
+                                msg = "Sorry,some error occurred";
+                            }
+                            showAlert(msg);
+                        }
+
+                    }
+                });
+
+            }
+        }).start();
+
     }
 
-    public void showQuickLook(JSONObject param, String url) {
+    public void showQuickLook(final JSONObject param, final String url) {
 
-        // 下载文件
-        if(BuildConfig.DEBUG && true){
-            //do something for assert aim
-            Log.e("Result", "showQuickLook: not implement");
-        }
+        showProgressDialog("Please wait","Downloading...");
+        new Thread(new Runnable() {
+            @Override
+            public void run() {
+
+                // 下载文件
+                final String path = Network.downloadFile(RAUtil.Json2Bundle(param),url);
+                final String type = RAUtil.getMimeType(path);
+
+                runOnUiThread(new Runnable() {
+                    @Override
+                    public void run() {
+                        progressDialog.dismiss();
+                        if (path != null && !path.isEmpty()) {
+                            Uri uri= Uri.parse(path);
+                            openFileAtPath(uri,type);
+                        }
+                    }
+                });
 
-        // path mimeType
-        String path = null;
-        String type = null;
-        if (path != null && !path.isEmpty()) {
-            Uri uri= Uri.parse(path);
-            if (type == null) {
-                type = "*/*";
             }
-            openFileAtPath(uri,type);
-        }
+        }).start();
+
+
     }
 
     private void openFileAtPath(Uri uri, String type) {

+ 135 - 38
RedAnt Mobile/app/src/main/java/com/usai/redant/util/Network.java

@@ -7,7 +7,9 @@ import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
 import android.net.ConnectivityManager;
 import android.net.NetworkInfo;
+import android.net.Uri;
 import android.os.Bundle;
+import android.os.Environment;
 import android.text.TextUtils;
 import android.util.Log;
 
@@ -46,6 +48,7 @@ import java.io.BufferedWriter;
 import java.io.DataOutputStream;
 import java.io.File;
 import java.io.FileInputStream;
+import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
@@ -66,6 +69,8 @@ import java.security.KeyStoreException;
 import java.security.NoSuchAlgorithmException;
 import java.security.UnrecoverableKeyException;
 import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
 import java.util.Set;
 import java.util.UUID;
 
@@ -267,10 +272,10 @@ public class Network
 
 			parms.putString("app_ver", RedAntApplication.getInstance()
 					.getPackageManager()
-					.getPackageInfo("com.usai.redant.raimage", 0).versionName);
+					.getPackageInfo("com.usai.redant.redantmobile", 0).versionName);
 			parms.putInt("app_short_ver", RedAntApplication.getInstance()
 					.getPackageManager()
-					.getPackageInfo("com.usai.redant.raimage", 0).versionCode);
+					.getPackageInfo("com.usai.redant.redantmobile", 0).versionCode);
 
 			parms.putString("deviceid",RedAntApplication.device_id);
 
@@ -1822,50 +1827,142 @@ public class Network
 		}
 	}
 
-	public static String download_query(Bundle params) {
+	public static String downloadFile(Bundle params, String download_url) {
+
+		HttpURLConnection connection = null;
+		try {
+
+			String fileName = UUID.randomUUID().toString();
+			String dir = "download";
+			if (RAUtil.isFileExist(fileName,dir)) {
+				return dir + File.separator + fileName;
+			} else {
+				// 创建一个URL对象
+				URL url=new URL(download_url);
+				// 创建一个HTTP链接
+				connection=(HttpURLConnection)url.openConnection();
+
+				// 拼参数
+				if (params != null && params.keySet().size() > 0) {
+					OutputStream os = connection.getOutputStream();
+					BufferedWriter writer = new BufferedWriter(
+							new OutputStreamWriter(os, "UTF-8"));
+					writer.write(createPostParameters(params));
+
+					writer.flush();
+					writer.close();
+					os.close();
+				}
+
+				// 获取响应
+				JSONObject responseHeader = getResponseHeader(connection);
+				String suggestedFileName = getResponsesuggestedFilename(responseHeader);
+				Log.d("Download", "download_query: " + suggestedFileName);
+				if (suggestedFileName != null && !suggestedFileName.isEmpty()) {
+					fileName = suggestedFileName;
+				}
 
-		if(BuildConfig.DEBUG && true){
-			//do something for assert aim
-			Log.e("Result", "onClick: not implement");
+				// 使用IO流获取数据
+				InputStream inputStream=connection.getInputStream();
+				// 写文件
+				File downloadFile = RAUtil.write2SDFromInput(fileName,dir,inputStream);
+
+				if (downloadFile == null) {
+					return null;
+				} else {
+					return downloadFile.getAbsolutePath();
+				}
+			}
+
+		} catch (IOException e) {
+			e.printStackTrace();
+		} finally {
+			if (connection != null) {
+				connection.disconnect();
+			}
 		}
 
-//		HttpURLConnection connection = null;
-//		try {
-//
-//			URL url = new URL("https://www.baidu.com/");
-//			connection = (HttpURLConnection)url.openConnection();
-//			connection.setRequestMethod("GET");
-//			connection.setUseCaches(false);
-//			connection.setConnectTimeout(1500);
-//			connection.setReadTimeout(1500);
-//
-//			BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
-//			StringBuilder response = new StringBuilder();
-//			String line;
-//			while ((line = reader.readLine()) != null) {
-//				response.append(line);
-//			}
-//
-//		} catch (IOException e) {
-//			e.printStackTrace();
-//		} finally {
-//			if (connection != null) {
-//				connection.disconnect();
-//			}
-//		}
 
 
-//		//创建下载任务,downloadUrl就是下载链接
-//		DownloadManager.Request request = new DownloadManager.Request(Uri.parse(downloadUrl));
-//		//指定下载路径和下载文件名
-//		request.setDestinationInExternalPublicDir("/download/", fileName);
-//		//获取下载管理器
-//		DownloadManager downloadManager= (DownloadManager) mContext.getSystemService(Context.DOWNLOAD_SERVICE);
-//		//将下载任务加入下载队列,否则不会进行下载
-//		downloadManager.enqueue(request);
+		return null;
+	}
+
+	public static String download_query(String download_url) {
+
+		return downloadFile(null,download_url);
+	}
+
+	//读取响应头
+	public static JSONObject getResponseHeader(HttpURLConnection conn) {
+		Map<String, List<String>> responseHeaderMap = conn.getHeaderFields();
+		int size = responseHeaderMap.size();
+		try {
+			JSONObject responseHeader = new JSONObject();
+			for(int i = 0; i < size; i++){
+				String responseHeaderKey = conn.getHeaderFieldKey(i);
+				String responseHeaderValue = conn.getHeaderField(i);
+				if (responseHeaderKey != null && !responseHeaderKey.isEmpty() && responseHeaderValue != null) {
+					responseHeader.put(responseHeaderKey,responseHeaderValue);
+				}
+			}
+			return responseHeader;
+		} catch (JSONException e) {
+			e.printStackTrace();
+			return null;
+		}
+	}
+
+	public static String getResponsesuggestedFilename(JSONObject response) {
+
+		if (response == null) {
+			return null;
+		}
+
+		try {
+			String key = "Content-Disposition";
+			String content_disposition = response.getString(key);
+			if (content_disposition != null) {
+				String[] components = content_disposition.split(";");
+				if (components[1] != null) {
+					String fileName = components[1].split("=")[1];
+					fileName = fileName.replace("\"","");
+					return fileName;
+				}
+			}
+
+		} catch (JSONException e) {
+			e.printStackTrace();
+		}
+
 
 		return null;
 	}
 
 
+	public static JSONObject kv_detail(Bundle params) {
+
+		params.putString("_action","ant_mobile");
+		params.putString("module","kv_detail");
+		params.putString("_operate","row_action");
+
+		String json_string = getJson(RedAntApplication.server,params);
+
+		if (json_string == null || json_string.isEmpty()) {
+			json_string = "{\"result\" : \"1\"}";
+		}
+
+		try {
+			return new JSONObject(json_string);
+		} catch (JSONException e) {
+			e.printStackTrace();
+			return null;
+		}
+	}
+
+
+	public static JSONObject require_orderdetail(String url,Bundle param) {
+
+		return request_editor(url,param);
+	}
+
 }

+ 67 - 0
RedAnt Mobile/app/src/main/java/com/usai/redant/util/RAUtil.java

@@ -8,13 +8,16 @@ import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
 import android.graphics.Matrix;
 import android.media.ExifInterface;
+import android.media.MediaMetadataRetriever;
 import android.media.MediaScannerConnection;
 import android.net.Uri;
 import android.os.Build;
 import android.os.Bundle;
+import android.os.Environment;
 import android.support.v4.app.ActivityCompat;
 import android.support.v4.content.PermissionChecker;
 import android.util.Log;
+import android.webkit.MimeTypeMap;
 
 import com.usai.redant.redantmobile.RedAntApplication;
 
@@ -25,6 +28,8 @@ import org.json.JSONObject;
 import java.io.File;
 import java.io.FileOutputStream;
 import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
 import java.lang.reflect.Array;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -625,4 +630,66 @@ public class RAUtil {
         return applicationName;
     }
 
+    public static String SDCardRoot() {
+        return Environment.getExternalStorageDirectory()+File.separator;
+    }
+
+    public static File createSDDir(String dir)throws IOException{
+        File dirFile=new File(SDCardRoot()+dir);
+        dirFile.mkdir();//mkdir()只能创建一层文件目录,mkdirs()可以创建多层文件目录
+        return dirFile;
+    }
+
+    //在SD卡上创建文件
+    public static File createFileInSDCard(String fileName,String dir) throws IOException {
+        File file=new File(SDCardRoot()+dir+File.separator+fileName);
+        file.createNewFile();
+        return file;
+    }
+
+    public static boolean isFileExist(String fileName,String dir){
+        File file=new File(SDCardRoot()+dir+File.separator+fileName);
+        return file.exists();
+    }
+
+    //将一个InoutStream里面的数据写入到SD卡中
+    public static File write2SDFromInput(String fileName,String dir,InputStream input){
+        File file=null;
+        OutputStream output=null;
+        try {
+            //创建目录
+            createSDDir(dir);
+            //创建文件
+            file=createFileInSDCard(fileName,dir);
+            //写数据流
+            output=new FileOutputStream(file);
+            byte buffer[]=new byte[4*1024];//每次存4K
+            int temp;
+            //写入数据
+            while((temp=input.read(buffer))!=-1){
+                output.write(buffer,0,temp);
+            }
+            output.flush();
+        } catch (Exception e) {
+            System.out.println("写数据异常:"+e);
+        }
+        finally{
+            try {
+                output.close();
+            } catch (Exception e2) {
+                System.out.println(e2);
+            }
+        }
+        return file;
+    }
+
+    public static String getMimeType(String filePath) {
+        String ext = MimeTypeMap.getFileExtensionFromUrl(filePath);
+        String mime = MimeTypeMap.getSingleton().getMimeTypeFromExtension(ext);
+        if (mime == null || mime.isEmpty()) {
+            mime = "text/plain";
+        }
+        return mime;
+    }
+
 }

+ 10 - 0
RedAnt Mobile/app/src/main/res/layout/activity_kvdetail.xml

@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<android.support.constraint.ConstraintLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    tools:context="com.usai.redant.Detail.KVDetailActivity">
+
+</android.support.constraint.ConstraintLayout>

+ 10 - 0
RedAnt Mobile/app/src/main/res/layout/activity_order_detail.xml

@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<android.support.constraint.ConstraintLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    tools:context="com.usai.redant.Detail.OrderDetailActivity">
+
+</android.support.constraint.ConstraintLayout>