【问题标题】:how to stop skipping 1100 frames如何停止跳过 1100 帧
【发布时间】:2018-02-18 19:10:02
【问题描述】:

我在下面有 2 个运行搜索功能,但我跳过了 200-1100 之间的任何地方。

它使用 openLibrary 搜索 API 以及在 AWS 上引用我自己的 SQL 服务器,它功能齐全,但只是跳过了这么多帧

package tk.bookpass.bookpass;
import java.sql.*;
import android.content.*;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.CardView;
import android.view.View;
import android.widget.*;
import android.os.*;
import java.io.IOException;
import java.util.*;

public class SearchResults extends AppCompatActivity {
    int size=0;
    String ResultISBN1;
    String ResultISBN2;
    String ResultISBN3;
    ArrayList<String> resultsStore = new ArrayList<>();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_search_results);

        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitNetwork().build();
        StrictMode.setThreadPolicy(policy);

        //seekBar Code
        SeekBar seekBar = findViewById(R.id.seekBar);
        seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                double pageNum = size;
                pageNum = Math.floor((pageNum / 3));
                TextView pageNumber = findViewById(R.id.pageNum);
                pageNumber.setText("Page: "+ Integer.toString(seekBar.getProgress())+ " Of " +(int)pageNum);


                displayResults(resultsStore);
            }
            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {}
            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {}
        });


        //cardView to details
        CardView cardView1 = findViewById(R.id.cardView1);
        cardView1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent regIntent = new Intent(SearchResults.this,BookDetails.class);
                SearchResults.this.startActivity(regIntent);
            }
        });
        CardView cardView2 = findViewById(R.id.cardView2);
        cardView2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent regIntent = new Intent(SearchResults.this,BookDetails.class);
                SearchResults.this.startActivity(regIntent);
            }
        });
        CardView cardView3 = findViewById(R.id.cardView3);
        cardView3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent regIntent = new Intent(SearchResults.this,BookDetails.class);
                SearchResults.this.startActivity(regIntent);
            }
        });

    //run search

        ImageButton imageButton = findViewById(R.id.imageButton);
        imageButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent regIntent = new Intent (SearchResults.this, SearchResults.class);
         //start
                size=0;
                startSearch();
            }
        });
    }


    private void startSearch(){

        EditText searchText = findViewById(R.id.searchText);
        String searchingTerm = searchText.getText().toString();

        ArrayList<String> searchStore = new ArrayList<>();
        try{
            searchStore =getSearchResults(searchingTerm);
        }
        catch(IOException e)
        {
                    //do nothing
        }
        resultsStore = checkResults(searchStore);
        size = resultsStore.size();

        setUpSeekBar();
        displayResults(resultsStore);
    }

    private ArrayList<String> checkResults(ArrayList<String> searchStore) {
        LinkedHashSet<String> resultsHash = new LinkedHashSet<String>();
            try {
                Class.forName("com.mysql.jdbc.Driver");
                Connection con = DriverManager.getConnection(//removed);
                Statement stmt = con.createStatement();
                ResultSet rs = stmt.executeQuery("select ISBN_fk from Book_Stock");
                while (rs.next())
                    resultsHash.add(rs.getString("ISBN_FK"));

                con.close();

            } catch (Exception e) {
        }
        ArrayList<String> resultsStore = new ArrayList<String>(resultsHash);
        ArrayList<String> duplicatevalues = new ArrayList<String>();
        for (String finalval : resultsStore) {
            if (searchStore.contains(finalval)) {
                duplicatevalues.add(finalval);
            }
        }
        return duplicatevalues;
    }

    private void displayResults(ArrayList<String> resultsStore)
    {
        SeekBar seekBar = findViewById(R.id.seekBar);
        int position = seekBar.getProgress();
        fillCardOne(position, resultsStore);
        fillCardTwo(position, resultsStore);
        fillCardThree(position, resultsStore);

    }

    private void setUpSeekBar() {
        SeekBar seekBar = findViewById(R.id.seekBar);
        seekBar.getThumb();
        seekBar.setProgress(0);
        if (size < 3) {

        }
        else {
            double pageNum = size;
            pageNum = Math.floor((pageNum / 3));
            seekBar.setMax((int)pageNum);
            TextView pageNumber = findViewById(R.id.pageNum);
            pageNumber.setText("Page: "+ Integer.toString(seekBar.getProgress())+ " Of " +(int)pageNum);
            seekBar.setVisibility(seekBar.VISIBLE);
        }
    }

    private void fillCardOne(int position, ArrayList<String> resultsStore){
        int resultsNumber = (0+(position*3));
        String Title=null;
        String Author=null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            Connection con = DriverManager.getConnection(//removed);
            Statement stmt = con.createStatement();
            ResultSet rs = stmt.executeQuery("select * from Book_Details where ISBN = "+resultsStore.get(resultsNumber));
            while (rs.next())
            {
                ResultISBN1 = rs.getString("ISBN");

                Title =rs.getString("Title");
                Author =rs.getString("Author");
            }
            con.close();

        } catch (Exception e) {;
        }

        TextView bookName = findViewById(R.id.bookName);
        bookName.setText("Title: "+Title); //title

        TextView authorName = findViewById(R.id.authorName);
        authorName.setText("Author: "+Author);
    }
    private void fillCardTwo(int position, ArrayList<String> resultsStore){
        int resultsNumber = (1+(position*3));
        String Title=null;
        String Author=null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            Connection con = DriverManager.getConnection(//removed);
            Statement stmt = con.createStatement();
            ResultSet rs = stmt.executeQuery("select * from Book_Details where ISBN = "+resultsStore.get(resultsNumber));
            while (rs.next())
            {
                ResultISBN2 = rs.getString("ISBN");

                Title =rs.getString("Title");
                Author =rs.getString("Author");
            }
            con.close();

        } catch (Exception e) {;
        }

        TextView bookName2 = findViewById(R.id.bookName2);
        bookName2.setText("Title: "+Title); //title

        TextView authorName2 = findViewById(R.id.authorName2);
        authorName2.setText("Author: "+Author);

    }
    private void fillCardThree(int position, ArrayList<String> resultsStore){
        int resultsNumber = (2+(position*3));
        String Title=null;
        String Author=null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            Connection con = DriverManager.getConnection(//removed);
            Statement stmt = con.createStatement();
            ResultSet rs = stmt.executeQuery("select * from Book_Details where ISBN = "+resultsStore.get(resultsNumber));
            while (rs.next())
            {
                ResultISBN3 = rs.getString("ISBN");

                Title =rs.getString("Title");
                Author =rs.getString("Author");
            }
            con.close();

        } catch (Exception e) {;
        }

        TextView bookName3 = findViewById(R.id.bookName3);
        bookName3.setText("Title: "+Title); //title

        TextView authorName3 = findViewById(R.id.authorName3);
        authorName3.setText("Author: "+Author);

    }
    private ArrayList<String> getSearchResults(String searchingTerm)throws IOException
    {
        ArrayList<String> searchStore = new ArrayList<String>();
        searchingTerm =searchingTerm.replace(" ", "%20");
        searchStore = search2.reader(searchingTerm);
        return searchStore;
    }
}

类2

package tk.bookpass.bookpass;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.ArrayList;
import android.util.Log;

public class search2 {
    public static ArrayList<String> reader(String searchingTerm) throws IOException {
        int switches = 0;
        ArrayList<String> searchStore = new ArrayList<String>();
        URL search = new URL("http://openlibrary.org/search.json?q=" + searchingTerm);//search string
        BufferedReader in = new BufferedReader(
                new InputStreamReader(search.openStream()));
        String inputLine;
        while ((inputLine = in.readLine()) != null) //read file
        {
            if (switches == 0) {
                if (inputLine.contains("\"isbn\": [")) {
                    switches = 1;
                }
            } else if (switches == 1) {
                switches = 0;
                inputLine = inputLine.replace("\"", "");
                inputLine = inputLine.replace(",", "");
                inputLine = inputLine.replace(" ", "");
                String ISBN = "0";
                try {
                        searchStore.add(inputLine);
                } catch (Exception e) {
                    switches = 1; //if the ISBN is of the number letter format run again on the next line
                }
            }
        }
        return searchStore;
    }
}

任何帮助将不胜感激,我需要保持搜索功能和相同的基本布局。

【问题讨论】:

    标签: android performance android-layout


    【解决方案1】:

    第 1 步:去掉这些行:

    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitNetwork().build();
    StrictMode.setThreadPolicy(policy);
    

    第 2 步:通过将网络 I/O 移动到后台线程来修复出现的 NetworkOnMainThreadException 崩溃。请参阅this Stack Overflow question 了解各种解决方案,以及有关 Android 应用开发的任何不错的书籍或课程。

    在此过程中,请重新考虑您对 JDBC 的使用。这不是为在移动客户端上使用而设计的。将您的数据库包装在 Web 服务中,然后从您的 Android 应用程序中使用该 Web 服务。

    【讨论】:

    • 是的,JDBC 是一个临时的东西。我看一下 StrictMode,但这真的会减慢它的速度吗?
    • @tomj:1100 帧的抱怨是因为您在主应用程序线程上做了太多工作。您正在主应用程序线程上执行网络 I/O。所以,停止在主应用线程上进行网络 I/O。
    猜你喜欢
    • 2017-11-27
    • 1970-01-01
    • 2016-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多